デモ:ブラウザでLoomを試す

説明するより、見ていただきたいと考えています。 以下のデモは、どれもブラウザの中で動きます。それぞれ、実際の出力とサンプルデータのどちらを使っているか、まだできないことは何かを明記しています。自律レベルのデモは「今後の予定」に置き、サンプルデータで設計を示しています。一部のデモの画面は、現在英語のみです。

自社のスタイルシートを読む

CSS、SCSS、またはトークンファイルを貼り付けます。ページの中でLoom自身の監査コードが読み、見つけたことから先に示します。ハードコードされた色がいくつあるか、そのうちいくつがほぼ同じ色か、どの文字と背景の組み合わせがコントラストを満たしていないかです。ハードコードされた色の一つひとつが、システムのレベルで誰も下していない判断です。そのうえで、スタイルシートからわかる2つの領域を採点します。どこにも送信しません。

評価基準の残りの6つの領域

自社のスタイルシートを読む(英語)

デザインシステムの1四半期

0、7、11、13 週目(二つの出来事をオンにした場合)
週運用モデルあり道具だけ
0 週目 · 11月5日(木)0 週目。まだ依頼はありません。木曜の議題は「話し合うことはない」です。0 週目。まだ依頼はありません。
7 週目 · 12月24日(木)7 週目。基盤のオーナーは不在です。2 件のレビューが代理に移り、木曜の議題に載っています。7 週目。8 件の依頼が、オーナーも期日もないまま記録されています。基盤のオーナーは不在で、誰が代わるのかはどこにも記録されていません。
11 週目 · 1月21日(木)11 週目。チェックアウトの例外は期限切れになりました。指摘は基盤のオーナーに戻り、改めて判断が必要です。11 週目。9 件の依頼が、オーナーも期日もないまま記録されています。チェックアウトの例外には期限がないため、そのまま残り、誰も改めて判断を求められません。
13 週目 · 2月4日(木)13 週目。チェックアウトの例外は期限切れになりました。指摘は基盤のオーナーに戻り、改めて判断が必要です。13 週目。10 件の依頼が、オーナーも期日もないまま記録されています。チェックアウトの例外には期限がないため、そのまま残り、誰も改めて判断を求められません。

サンプルデータです。Harbor UI は架空のシステムで、役割は実在の人物ではありません。キュー、議題、期日、期限は Loom のガバナンスのコードが出した実際の結果です。道具だけの側は、同じ出来事をオーナー、サービスレベル、期限を記録せずに示しています。

ツールは依頼を記録します。運用モデルは、その依頼に担当者と期日を与えます。私たちがテスト用につくったシステムHarbor UIの1四半期を、1週ずつ進めてみてください。基盤のオーナーを休暇に出したり、リリースの締め切りと色のルールをぶつけたりすると、誰が動くかがわかります。議題、キュー、期日、期限切れは、ページのビルド時にLoomのガバナンスのコードが実際に算出したものです。

データ:サンプルの記録と、実際のガバナンスのコード。

チェックされたエージェントのドラフト

削除の確認

Loom のチェックは、下書きにエラー 3 件と警告 2 件を見つけました。

src/settings/DangerZone.tsx · エージェントの下書き

import { Card, Button, Heading, Text } from "@loom/base/native";import { Modal } from "@mui/material"; export function DangerZone() {  return (    <Card>      <Heading level={2}>Danger zone</Heading>      <Text style={{ color: "#1e1a16", marginBottom: 16 }}>Deleting removes every journey in this workspace.</Text>      <Button tone="primary">Export first</Button>      <Button variant="danger" tone="primary" onClick={() => setOpen(true)}>Delete workspace</Button>      <Modal open={open}>Are you sure?</Modal>    </Card>  );}

check_composition が見つけたこと

  1. Customise through the component's slots, variants or overridable tokens within the layer's lock level; if none fits, propose an extension with propose_change.

  2. Did you mean "tone" ("primary" | "secondary" | "quiet" | "danger")? primary: the one main action in a view; secondary: other actions; quiet: toolbars and dense areas; danger: removes or loses something.

  3. Closest system components: AILabel (ai-label), Dialog (dialog), Drawer (drawer). If none fits, draft one with propose_change.

  4. No exact token. Nearest colour token is var(--base-color-palette-neutral-900) (#201e1a); pick the token whose role fits rather than a new colour.

  5. Use var(--base-space-scale-6) (16px).

修正後 · エラーなし、警告なし
import { Card, Button, Text, Stack, ConfirmAction } from "@loom/base/native"; export function DangerZone() {  return (    <Card title="Danger zone" headingLevel={2}>      <Stack gap="md">        <Text>Deleting removes every journey in this workspace.</Text>        <Button tone="secondary">Export first</Button>        <ConfirmAction title="Delete the workspace?" confirmLabel="Delete the workspace"          cancelLabel="Keep the workspace" onConfirm={remove} />      </Stack>    </Card>  );}

請求情報のフォーム

Loom のチェックは、下書きにエラー 4 件と警告 5 件を見つけました。

src/billing/Billing.tsx · エージェントの下書き

import { Modal } from "@mui/material";import { Button } from "@loom/base/native"; export function Billing() {  return (    <div style={{ padding: "18px", color: "#333" }}>      <h1>Billing</h1>      <Button variant="primary">Save card</Button>      <Button variant="primary">Cancel</Button>      <Modal open>Card declined. Try again</Modal>      <input placeholder="Card number" />    </div>  );}

check_composition が見つけたこと

  1. import { Heading } from "@loom/base/native";

  2. Did you mean "tone" ("primary" | "secondary" | "quiet" | "danger")? primary: the one main action in a view; secondary: other actions; quiet: toolbars and dense areas; danger: removes or loses something.

  3. Did you mean "tone" ("primary" | "secondary" | "quiet" | "danger")? primary: the one main action in a view; secondary: other actions; quiet: toolbars and dense areas; danger: removes or loses something.

  4. Give "Cancel" a lower-emphasis tone (tone="secondary") and keep the main-action tone for the action that completes the task.

  5. Closest system components: AILabel (ai-label), Dialog (dialog), Drawer (drawer). If none fits, draft one with propose_change.

  6. import { TextField } from "@loom/base/native"; Then: <TextField label="Card number" … />

  7. Give it a visible label: <TextField label="Card number" … /> (import { TextField } from "@loom/base/native";)

  8. 18px is off the scale; nearest is var(--base-space-scale-6) (16px).

  9. No exact token. Nearest colour token is var(--base-color-palette-neutral-800) (#32302c); pick the token whose role fits rather than a new colour.

修正後 · エラーなし、警告なし
import { Card, Heading, TextField, Button, Stack, Alert } from "@loom/base/native"; export function Billing() {  return (    <Card>      <Stack gap="md">        <Heading level={1}>Billing</Heading>        <Alert tone="danger">Card declined. Try another card.</Alert>        <TextField label="Card number" />        <Button tone="primary">Save card</Button>        <Button tone="quiet">Cancel</Button>      </Stack>    </Card>  );}

空の状態

Loom のチェックは、下書きにエラー 2 件と警告 2 件を見つけました。

src/invoices/NoInvoices.tsx · エージェントの下書き

import { Card, Button } from "@loom/base/native"; export function NoInvoices() {  return (    <Card>      <img src="/empty-invoices.svg" />      <h2 style={{ color: "#6b6b6b", marginTop: 24 }}>Nothing here</h2>      <p>You have not created any invoices yet.</p>      <Button tone="primary">Create invoice</Button>      <Button tone="primary">Import invoices</Button>    </Card>  );}

check_composition が見つけたこと

  1. Add alt="" for decorative images or a description for meaningful ones.

  2. import { Heading } from "@loom/base/native";

  3. No exact token. Nearest colour token is var(--base-color-palette-cotton-500) (#666c79); pick the token whose role fits rather than a new colour.

  4. Use var(--base-space-scale-8) (24px).

修正後 · エラーなし、警告なし
import { EmptyState } from "@loom/base/native"; export function NoInvoices() {  return (    <EmptyState title="No invoices yet" description="Invoices you create or import appear here."      actionLabel="Create an invoice" />  );}

スクリプトによる例です。モデルは呼び出していません。下書きは私たちが Loom Base 1.0.0 に対して書いたもので、指摘は Loom の check_composition が出した実際の結果です。

エージェントにシステムを渡すことと、エージェントをシステムに沿わせることは、同じではありません。スクリプトで動くエージェントが、私たちのオープンソースのシステムLoom Baseに対して、3つのドラフトを書きました。取り消しできない操作の確認、請求フォーム、空の状態です。指摘は、ページのビルド時にLoomのcheck_compositionが出した実際の結果です。指摘を選ぶと、その行、ルール、修正方法がわかります。エージェントはスクリプトで動くため、これはチェックが何を検出するかを示すもので、実際のエージェントがどのくらいの頻度で誤るかを示すものではありません。チェックの有無による数値は、実際の評価を実行してから公開します。指摘の文章はチェックの出力のままで、英語です。

リポジトリに届くもの

ドラフト Loom:デザインシステムの記録、ルール、エージェント用ファイルを用意する

loom/ ブランチに 39 個のファイルを追加。自社のチームの誰かがレビューし、マージするかどうかを決めます。

変更されたファイル

  • .claude/skills/acme-app-design-system/SKILL.md+46

    同じガイダンスを、Claude Code などのエージェント向けのスキルとして。 オーナー: システムオーナー

    ---
    name: acme-app-design-system
    description: "Build and review UI with the Acme App design system (acme-app): components with lifecycle status, token…
    ---
    
    # Acme App design system
    
    > Generated by Loom from the system's records; do not edit by hand. Regenerate with `npx loom agent-pack`.
    
    ## When to use
    
    - Writing or changing UI in a repository that uses `acme-app`.
    - Choosing a colour, spacing, radius, type or motion value: use a token.
    - Reviewing UI for drift from the system (off-system components, raw values, style overrides, accessibility).
    
    ## Workflow
    
    1. Find what exists: the component index below, then `references/components.md` for the full contract (import, props …
    2. Choose by lifecycle status: stable first; a beta item if no stable one fits, named as beta in your answer and in a…
    3. Take every value from `references/tokens.md`. No raw hex, rgb or px values.
    4. Check the rules and patterns in `references/governance.md` before finishing.
    5. If something is missing, say so and propose it; do not build an off-system copy.
    6. With the Loom MCP server configured, `check_composition` and `audit_code` validate the result.
    
    ## Component index
    
    | Component | Import | Status | Purpose |
    | --- | --- | --- | --- |
    | Badge | `import { Badge } from "acme-app";` | draft (declared "proposal") | Badge: purpose not recorded yet (conver…
    | Button | `import { Button } from "acme-app";` | draft (declared "proposal") | The main action on a screen. |
    | Card | `import { Card } from "acme-app";` | draft (declared "proposal") | Card: purpose not recorded yet (converted…
    
    ## Tokens at a glance
    
    - **color:** 16 tokens
    - **spacing:** 7 tokens
    
    Every token, with value, role and restrictions: `references/tokens.md`.
    
    ## References

    ファイルにはさらに 6 行あります。

  • AGENTS.md+54

    このリポジトリで画面を書く前に、コーディングエージェントが読むもの。 オーナー: システムオーナー

    # AGENTS.md: Acme App design system
    
    > Generated by Loom from the system's records; do not edit by hand. Regenerate with `npx loom agent-pack`.
    > Records: knowledge digest `09ac1ecf2ca2`, 23 tokens, 3 components, 0 patterns.
    
    ## Use the design system
    
    - **Package:** `acme-app` 0.0.0. Import components from it; never copy their source.
    - **Skill:** `.claude/skills/acme-app-design-system/SKILL.md` (Agent Skills format) holds the workflow; its `referenc…
    - **Loom MCP server (optional):** when it is configured for this repository, prefer its tools for exact, current answ…
    - **Loom CLI:** `npx loom info --json` (project setup), `npx loom doc <Component>`, `npx loom token <name>`, and `npx…
    
    ## Rules for agents
    
    1. Build UI from the system's components. Use the exact import line and only documented props and values.
    2. Use tokens for colour, spacing, radius, type, elevation and motion. Never write raw hex, rgb or px values.
    3. Lifecycle: Every component and pattern carries a lifecycle status: draft → beta → stable → deprecated. Prefer stab…
    4. Customise through slots, variants and overridable tokens; do not override a component's className or style.
    5. Accessibility obligations of every component you use are requirements, not suggestions; accessibility findings alw…
    6. When you open a pull request, list every beta component it uses as beta in the pull request body.
    7. If the system lacks what you need, do not build it off-system: say so, use the closest fit only if it truly fits, …
    
    ## Lifecycle status
    
    | Status | Meaning | Components and patterns | Agents |
    | --- | --- | --- | --- |
    | draft | Work in progress or a proposal. Not for production UI; it may change or disappear without notice. | 3 | Not…
    | beta | Usable in product UI. The API may still change in a minor release; changes are announced in the changelog. |…
    | stable | Changes follow semver. A breaking change needs a major release with a codemod or migration pull request. |…
    | deprecated | Being removed. Existing uses keep working until the removal version; new UI must not use it. | 0 | Not…
    
    Every item has a recorded status. Definitions of done: `references/governance.md` in the skill.
    
    ## Components by status
    
    - **Draft (not suggested; not for production):** Badge, Button, Card
    
    ## Accepted rules
    
    - **Use colour tokens, not raw colours** (`loom.raw-colour`, warn): Raw colours bypass themes, modes and contrast che…

    ファイルにはさらに 14 行あります。

  • DESIGN.md+275

    記録から生成した、システム全体を一つにまとめた Markdown ファイル。 オーナー: システムオーナー

    ---
    version: alpha
    name: "Acme App"
    description: "The Acme App design system (acme-app), exported by Loom from its records: 23 tokens, 3 components, 0 pa…
    colors:
      "--semantic-surface-default": "#ffffff"
      "--semantic-text-default": "#ffffff"
      "--semantic-border-default": "#e5e7eb"
      "--semantic-action-primary": "#2563eb"
    spacing:
      "--proto-space-2": "8px"
      "--proto-space-4": "16px"
      "--space-1": "4px"
      "--space-2": "6px"
      "--space-3": "8px"
      "--space-4": "16px"
      "--space-5": "24px"
    ---
    
    # Acme App
    
    > Generated by Loom from the system's records; do not edit by hand. Regenerate with `npx loom design-md --out DESIGN.…
    > Records: knowledge digest `09ac1ecf2ca2`, source `6682be71c9f7`, observed 2026-10-25T21:55:02.612Z. 23 tokens, 3 co…
    > Format: DESIGN.md alpha (github.com/google-labs-code/design.md). Token names are the system's own. Values are the d…
    
    ## Overview
    
    Acme App ships as `acme-app` 0.0.0. Owner: Design system owner. Rights: Client-owned source; not for redistribution.
    
    - **principles** guidance: not defined (no principles foundation in the records).
    
    Known limitations:
    
    - Generic project: tokens, contracts and snapshot only; no verified reusable runtime. (no-runtime)
    
    ### Token tiers and modes
    
    Tiers are stated for 18 of 23 tokens, inferred by Loom for the rest (inferred).
    
    | Tier | Tokens |

    ファイルにはさらに 235 行あります。

  • loom.config.json+26

    システムの記録がどこにあるかを loom コマンドに伝えます。 オーナー: エンジニア

    {
      "schema": "loom.config/1",
      "system": {
        "id": "acme-app",
        "name": "Acme App"
      },
      "builder": "loom/system/acme-app.builder.json",
      "tokens": "loom/system/tokens.dtcg.json",
      "contracts": "loom/system/contracts.json",
      "components": {
        "package": "acme-app",
        "source": "src/components"
      },
      "app": [
        "src"
      ],
      "governance": "loom",
      "stack": {
        "framework": "react",
        "bundler": "vite",
        "styling": [],
        "typescript": true,
        "packageManager": "npm"
      }
    }
    
  • loom/conversion/report.md+391

    最初の監査:スコア、指摘、その根拠。 オーナー: システムオーナー

    # acme-app: 9/100, Loose threads
    
    <!-- loom:agent-generated {"schema":"loom.provenance/1.0.0","generator":"loom-conversion","generatorVersion":"1.0.0",…
    > **Machine-generated by loom-conversion (no AI model involved)** on 2026-10-25. Not yet reviewed by a human. Label: …
    
    **Loom conversion report** — how this app is *structured, governed and used*, and the AI-ready system Loom generated …
    
    | | |
    |---|---|
    | Input | `src` (app with no design system) |
    | Version | 1.0.0 |
    | Consumer code scanned | `src` — 5 files |
    | Findings | 1 critical · 27 high · 9 medium · 3 low · 1 info |
    | Generated | 2026-10-25 |
    
    ## Headline
    
    - acme-app 1.0.0: 9/100 for structure, governance and use: Loose threads.
    - 0 of 4 components have a usage contract
    - 5 proto-tokens live in CSS custom properties with no types, roles or descriptions
    - 3 of 3 semantic/component tokens hold literals instead of aliasing a lower tier
    - Required modes missing: light, dark, high contrast
    - No DTCG token file: tokens cannot be validated, exchanged or compiled by standard tools
    
    ## Scorecard
    
    | Area | Score | | Biggest issue |
    |---|---:|---|---|
    | Foundations and tokens | 38 | ████░░░░░░ | 5 proto-tokens live in CSS custom properties with no types, roles or des…
    | Components | 4 | ░░░░░░░░░░ | 0 of 4 components have a usage contract |
    | Patterns and pages | – | not assessed | No pattern or template records in the inputs |
    | Usage | 13 | █░░░░░░░░░ | 3 components in use, none with a contract |
    | Governance | 3 | ░░░░░░░░░░ | Owners per component: absent |
    | Brand, illustration, microcopy and localisation | 0 | ░░░░░░░░░░ | Brand rules: absent |
    | Tools and sync | 0 | ░░░░░░░░░░ | 4 of 4 components have no story |
    | AI readiness | 0 | ░░░░░░░░░░ | No machine-readable component contracts |
    | **Overall** | **9** | █░░░░░░░░░ | |
    
    ## Before → after
    

    ファイルにはさらに 351 行あります。

  • loom/governance.json+94

    各領域のオーナー、代理、判断のサービスレベル。 オーナー: システムオーナー

    {
      "$comment": "Seeded by Loom for a tiny team (1 person). Every value is a proposal: edit it to how you actually work…
      "schema": "loom.governance/1.0.0",
      "provenance": "real",
      "systemOwner": "Design system owner",
      "guild": [
        {
          "name": "Design system owner",
          "discipline": "design"
        },
        {
          "name": "Design system owner",
          "discipline": "engineering"
        },
        {
          "name": "Design system owner",
          "discipline": "accessibility"
        }
      ],
      "areas": [
        {
          "id": "foundations",
          "label": "Foundations (tokens, type, modes)",
          "owner": "Design system owner",
          "scope": {
            "tiers": [
              "foundation"
            ],
            "ruleCategories": [
              "colour",
              "spacing"
            ]
          },
          "autonomy": "suggest"
        },
        {
          "id": "components",
          "label": "Components",
          "owner": "Design system owner",
          "scope": {

    ファイルにはさらに 54 行あります。

  • loom/rituals.json+36

    週次トリアージなどの定例。Loom が記録から議題を下書きします。 オーナー: システムオーナー

    [
      {
        "owner": "Design system owner",
        "id": "pr-review",
        "name": "Review a Loom pull request",
        "cadence": "on-demand",
        "minutes": 15,
        "attendees": [
          "system-owner",
          "area-owner"
        ],
        "purpose": "When Loom opens a pull request, the owner of that area reviews it within the service level. No standi…
        "agenda": [
          "overdue-reviews",
          "released-changes"
        ]
      },
      {
        "owner": "Design system owner",
        "id": "quarterly-tidy",
        "name": "Quarterly tidy",
        "cadence": "quarterly",
        "minutes": 30,
        "attendees": [
          "guild"
        ],
        "purpose": "Read the health numbers, close or renew exceptions, decide the next migration step.",
        "agenda": [
          "health-metrics",
          "expiring-exceptions",
          "expired-exceptions",
          "deprecations-due"
        ]
      }
    ]
    
  • loom/rules.json+66

    チェックが適用するルール。それぞれにオーナーと理由があります。 オーナー: 領域のオーナー

    [
      {
        "id": "acme-app.modes-from-tokens",
        "version": "0.1.0",
        "title": "Colour modes come from tokens, not per-selector overrides",
        "owner": "Design system owner",
        "rationale": "The starter maps light and dark to token modes; a new rule that restyles a selector for dark mode b…
        "severity": "warn",
        "category": "colour",
        "check": {
          "kind": "manual",
          "how": "Review new CSS in a pull request: no new rules scoped to the dark selector; set the semantic token's da…
        },
        "status": "proposed",
        "history": [
          {
            "version": "0.1.0",
            "date": "2026-10-25",
            "change": "Proposed by the Loom greenfield starter."
          }
        ]
      },
      {
        "id": "acme-app.keeps-the-look",
        "version": "0.1.0",
        "title": "Each migration step keeps every key screen within 0.5% pixel difference",
        "owner": "Design system owner",
        "rationale": "Migration to the system must not change the look (owner rule); look:diff measures it.",
        "severity": "warn",
        "category": "migration",
        "check": {
          "kind": "manual",
          "how": "Run npm run look:diff on the key screens in every colour mode before merging a migration step."
        },
        "status": "proposed",
        "history": [
          {
            "version": "0.1.0",
            "date": "2026-10-25",
            "change": "Proposed by the Loom greenfield starter."

    ファイルにはさらに 26 行あります。

  • loom/system/contracts.json+292

    コンポーネントごとのコントラクト:用途、使わない場面、状態、アクセシビリティ。 オーナー: 各コンポーネントのオーナー

    {
      "schemaVersion": "2.1.0",
      "snapshotDigest": "2c76c2b16e0a7c3d6eeb5e0bcd7bd6b6f075977a5dc3165ddf39662522165a2c",
      "contracts": [
        {
          "schemaVersion": "2.1.0",
          "behavior": {
            "schemaVersion": "1.0.0",
            "domains": {
              "transitions": {
                "applicability": "needs-review",
                "rationale": "Applicability and structured obligations require assessment against source and consumers.",
                "rules": []
              },
              "focus": {
                "applicability": "needs-review",
                "rationale": "Applicability and structured obligations require assessment against source and consumers.",
                "rules": []
              },
              "announcements": {
                "applicability": "needs-review",
                "rationale": "Applicability and structured obligations require assessment against source and consumers.",
                "rules": []
              },
              "controlledState": {
                "applicability": "needs-review",
                "rationale": "Applicability and structured obligations require assessment against source and consumers.",
                "rules": []
              },
              "content": {
                "applicability": "needs-review",
                "rationale": "Applicability and structured obligations require assessment against source and consumers.",
                "rules": []
              },
              "responsive": {
                "applicability": "needs-review",
                "rationale": "Applicability and structured obligations require assessment against source and consumers.",
                "rules": []
              },
              "localization": {

    ファイルにはさらに 252 行あります。

  • loom/system/tokens.dtcg.json+409

    オープンな DTCG 形式のトークン。階層ごとに整理されています。 オーナー: 基盤のオーナー

    {
      "$schema": "https://www.designtokens.org/schemas/2025.10/format.json",
      "$description": "acme-app: first typed token set, generated by Loom from an app with no design system. Proto-tokens…
      "$extensions": {
        "app.loom": {
          "generatedAt": "2026-10-25T21:55:02.562Z",
          "exporterFindings": [],
          "modes": {
            "detected": [
              "default"
            ],
            "decision": [],
            "status": "needs-human-decision"
          },
          "validation": {
            "format": "DTCG 2025.10",
            "leaves": 23,
            "valid": 23,
            "invalid": [],
            "unresolvedAliases": []
          }
        },
        "app.loom.provenance": {
          "schema": "loom.provenance/1.0.0",
          "generator": "loom-conversion",
          "generatorVersion": "1.0.0",
          "model": null,
          "provider": null,
          "generatedAt": "2026-10-25T21:55:02.594Z",
          "ai_generated": false,
          "human_reviewed": false,
          "label": "loom:agent-generated",
          "method": "Deterministic static analysis of the repository (no AI model); every field is marked generated-from-…
        }
      },
      "proto": {
        "color-primary": {
          "$type": "color",
          "$value": {
            "colorSpace": "srgb",

    ファイルにはさらに 369 行あります。

ほかに 29 個のファイル:システムの記録、変換の作業ファイル、スキルの参照資料
  • .claude/skills/acme-app-design-system/references/DESIGN.md 12.7 KB
  • .claude/skills/acme-app-design-system/references/components.md 2.9 KB
  • .claude/skills/acme-app-design-system/references/governance.md 6.2 KB
  • .claude/skills/acme-app-design-system/references/tokens.md 1.8 KB
  • loom/conversion/artefacts/PROVENANCE.json 2.2 KB
  • loom/conversion/artefacts/agent/AGENTS.md 1.8 KB
  • loom/conversion/artefacts/agent/rules.json 2.2 KB
  • loom/conversion/artefacts/contracts/badge.contract.json 3.7 KB
  • loom/conversion/artefacts/contracts/button.contract.json 3.9 KB
  • loom/conversion/artefacts/contracts/card.contract.json 3.7 KB
  • loom/conversion/artefacts/contracts/index.json 1.3 KB
  • loom/conversion/artefacts/governance/GOVERNANCE.md 4.0 KB
  • loom/conversion/artefacts/governance/governance.json 4.6 KB
  • loom/conversion/artefacts/guidelines/brand.md 1.5 KB
  • loom/conversion/artefacts/guidelines/illustration.md 1.5 KB
  • loom/conversion/artefacts/guidelines/localization.md 1.3 KB
  • loom/conversion/artefacts/guidelines/microcopy.md 1.4 KB
  • loom/conversion/artefacts/tokens/tokens.dtcg.json 9.5 KB
  • loom/conversion/plan.json 4.2 KB
  • loom/conversion/report.json 77.3 KB
  • loom/system/acceptance.json 0.0 KB
  • loom/system/acme-app.builder.json 0.9 KB
  • loom/system/catalogue/badge.json 0.5 KB
  • loom/system/catalogue/button.json 0.7 KB
  • loom/system/catalogue/card.json 0.5 KB
  • loom/system/foundations.json 2.4 KB
  • loom/system/inventory-lock.json 1.0 KB
  • loom/system/knowledge-authority.json 0.2 KB
  • loom/system/snapshot.json 30.0 KB

チェック

  • loom lint 問題あり

    5 個のファイルにエラー 2 件、警告 31 件。主にアプリの生の色とピクセル値で、それぞれ使うべきトークンを示します。チェックが失敗するのは仕組みが働いている証拠です。チームが一つずつ直すか、受け入れます。

  • loom doctor 合格

    セットアップのチェック 14 項目のうち 13 項目が合格:Node、git、設定、記録、エージェント用ファイル。

  • loom audit 参考

    アプリ自身の三つのコンポーネントから出した最初のスコアは 34 点(Loose threads)。

  • Loom のプルリクエストのルール 合格

    変更に CI ファイル、CODEOWNERS、ルールセットは含まれません。ワークフローを追加しようとすると拒否されます:"Loom does not write CI configuration; refused .github/workflows/loom-agents.yml."

Loom の GitHub App に許可されていること

権限アクセス用途
metadatareadリポジトリ名とブランチを読む。
contentswriteLoom 自身の loom/ ブランチへのプッシュ。メインブランチには書き込みません。
pull_requestswriteドラフトのプルリクエストを開き、コメントする。

Loom が決してしないこと

  • プルリクエストの承認。Loom のコードには承認する処理がありません。
  • マージ。マージするかどうかは、自社のチームの人が決めます。
  • CI ファイル、CODEOWNERS、ルールセットの変更。コミット前に書き込み処理が拒否し、App は workflows 権限を求めません。

実行したコマンド: loom init --team "Design system owner:design+engineering+accessibility" · loom agent-pack · loom design-md --out DESIGN.md · loom lint --json · loom doctor --json · loom audit --json

サンプルのリポジトリです。小さな React アプリに 2026-10-25 に Loom 自身のコマンドを実行しました。Loom はまだお客様のリポジトリで動いたことはありません。

Loomが行うことは、すべてチームがレビューするプルリクエストとして届きます。このプルリクエストは、ページのビルド時に、Loom自身のコマンドがサンプルのリポジトリ(小さなReactアプリ)で生成したものです。どのファイルも開いて読めます。LoomのGitHub Appはプルリクエストとコメントを作成しますが、承認やマージは決してしません。Loomはまだお客様のリポジトリで動いたことがなく、最初の導入を準備しているところです。

データ:サンプルのリポジトリに対する、実際のコマンドの出力。

私たちのスコアの根拠

お客様のシステムに使うのと同じルールで、自分たちも採点しています。デザインシステムを持たないオープンソースのメモアプリtakenote(100点中16点、「ほつれが多い」)、私たちのオープンソースのデザインシステムLoom Base(75点)、Loom自身の管理画面(22点、「ほつれが多い」)から選べます。領域を選ぶと、何をチェックしたか、各チェックの重み、主な指摘事項がわかります。どのシステムにも、そのスコアを出したコマンドが示されています。

データ:実際の監査出力。チェック項目と指摘事項の文章は監査エンジン自身の出力で、英語です。

私たちのスコアの根拠を見る(英語)

トークン化の前と後

ハードコードされた値をトークンに置き換えても、プロダクトの見た目が保たれることを確認できます。オープンソースのメモアプリの基本ボタンのスタイルルールを、Loomが生成したトークンへの変換の前と後で比べます。ブラウザが2つのボタンの計算済みスタイルを比べ、一致することを確かめます。「後」のルールは、Loomのトークンのコードモッドがそのトークンから書きます。完全に一致するものは高い確度で、SCSSの変数は中程度の確度で置き換え、rem値に対するpxのトークンは推測せずに人の判断に残します。

トークン化の前と後を見る(英語)

エージェントの再生

スクリプトで動くエージェントが、Loom Base(Loom自身のデザインシステム)で、LoomのMCPサーバーを使うセッションの記録を見られます。エージェントはシステムを検索し、コントラクト(機械可読なコンポーネント仕様)を読み、画面の構成をチェックし、指摘された点を直し、足りないものを提案します。各結果は実際にかかった時間どおりに表示され、ページ用に短くしています。

データはサーバーの実際の出力の記録です。エージェントはスクリプトで動くため、セッションは毎回同じです。

エージェントの再生を見る(英語)

レイヤー

いずれかのレイヤーの立場から、何を変えてよいかを確認できます。各ルールはあるレイヤーで定められ、その下でどこまで変えてよいか(ロック、拡張可、上書き可、デフォルト)を示しています。変更を試すと、受け入れられるか、理由が必要か、ルールのオーナーへの依頼になるかがわかります。

組織とそのルールはサンプルデータです。レイヤーのバージョンと互換性のチェックは、ガバナンスの記録に対して現在動いています。

レイヤーのデモを見る(英語)

今後の予定:自律レベル

領域のオーナーがエージェントに任せる範囲を広げたり狭めたりすると、何が変わるかを確認できます。変更を流してみると、各ステップで誰が動くか(Loom、人、または誰も動かない)がわかります。完全自動は、オーナーがリスクの説明を了承するまで有効になりません。マージの後には、ワンクリックで元に戻す操作が表示されます。

これは設計を示すものです。エージェントは、これらのモードのもとで自ら動くようになります。現在は、すべての変更が人を待ちます。データはサンプルです。

自律レベルのデモを見る(英語)

最初に変換したシステム

私たちのチームのプロダクトのデザインシステムStory Atelierは、Loomの作業前は100点中59点の「ほつれが多い」でした。Loomで変換した後は83点の「まとまっている」です。評価基準の重みやルールは一切変えていません。作業は手元のコピーで行い、Loom自身の公開評価基準で採点しており、記録はまだ創業者が承認していません。このシステムは非公開のため、公開するのはこの2つの総合スコアだけです。

最後は、自社のシステムで確かめてください

ヘルスチェックは約3分で終わります。ディスカバリー(現状調査)では、自社のリポジトリとFigmaライブラリに対して、監査をすべて実行します。

まずは、自社のデザインシステムについてお聞かせください。

私たちはシステムを読み、見つけたことをお見せし、何から直すかをチームと一緒に決めます。