# Send Storybook to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "storybook",
    "name": "Storybook",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/ivangdavila/storybook",
    "canonicalUrl": "https://clawhub.ai/ivangdavila/storybook",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/storybook",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=storybook",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "SKILL.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/storybook"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/storybook",
    "downloadUrl": "https://openagent3.xyz/downloads/storybook",
    "agentUrl": "https://openagent3.xyz/skills/storybook/agent",
    "manifestUrl": "https://openagent3.xyz/skills/storybook/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/storybook/agent.md"
  }
}
```
## Documentation

### CSF Format (Component Story Format)

Default export is component meta—title, component, args, decorators
Named exports are stories—each export becomes a story in sidebar
satisfies Meta<typeof Component> for TypeScript type checking
CSF3 uses object syntax, not functions—export const Primary = { args: {...} }

### Args vs ArgTypes

args are actual prop values passed to component—args: { label: 'Click me' }
argTypes configure controls UI—argTypes: { size: { control: 'select', options: ['sm', 'lg'] } }
Default args in meta apply to all stories—override in individual stories
argTypes: { onClick: { action: 'clicked' } } logs events in Actions panel

### Controls

Auto-inferred from TypeScript props—boolean becomes toggle, string becomes text input
Override control type: argTypes: { color: { control: 'color' } }
Disable control: argTypes: { children: { control: false } }
Options for select: control: { type: 'select' }, options: ['a', 'b', 'c']

### Decorators

Wrap stories with context—providers, layout wrappers, theme
Component-level in meta: decorators: [(Story) => <Provider><Story /></Provider>]
Global in .storybook/preview.js: applies to all stories
Order matters—later decorators wrap earlier ones

### Play Functions

Interactive testing within story: play: async ({ canvasElement }) => {...}
Use @storybook/testing-library for queries—within(canvasElement).getByRole()
await userEvent.click(button) for interactions
expect(element).toBeVisible() for assertions—tests run in browser

### Actions

argTypes: { onClick: { action: 'clicked' } } auto-logs to Actions panel
Or import: import { action } from '@storybook/addon-actions'
Use fn() from @storybook/test in Storybook 8+ for spying in play functions
Actions help verify event handlers without manual console.log

### Story Organization

Title path creates hierarchy: title: 'Components/Forms/Button'
Stories appear in order of export—put Primary first
tags: ['autodocs'] generates docs page automatically
parameters: { docs: { description: { story: 'text' } } } adds story description

### Common Patterns

Default state: export const Default = {}
With all props: export const WithIcon = { args: { icon: <Icon /> } }
Edge cases: Empty, Loading, Error, Disabled states as separate stories
Responsive: Use viewport addon parameters per story

### Render Functions

Custom render: render: (args) => <Wrapper><Component {...args} /></Wrapper>
Access context in render: render: (args, { globals }) => ...
Useful when story needs different JSX structure than default
Prefer decorators for wrapping, render for restructuring

### Configuration

.storybook/main.js: addons, framework, stories glob patterns
.storybook/preview.js: global decorators, parameters, argTypes
Stories glob: stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)']
Static assets: staticDirs: ['../public'] for images/fonts

### Common Mistakes

Forgetting to install addon AND add to main.js addons array
Using storiesOf API—deprecated, use CSF exports
Missing component in meta—controls won't auto-generate
Decorators returning Story without calling it: (Story) => <Story /> not (Story) => Story
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: ivangdavila
- Version: 1.0.0
## Source health
- Status: healthy
- Source download looks usable.
- Yavira can redirect you to the upstream package for this source.
- Health scope: source
- Reason: direct_download_ok
- Checked at: 2026-05-07T17:22:31.273Z
- Expires at: 2026-05-14T17:22:31.273Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/storybook)
- [Send to Agent page](https://openagent3.xyz/skills/storybook/agent)
- [JSON manifest](https://openagent3.xyz/skills/storybook/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/storybook/agent.md)
- [Download page](https://openagent3.xyz/downloads/storybook)