@design-ai/cli 4.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +164 -0
- package/AGENTS.ko.md +126 -0
- package/AGENTS.md +182 -0
- package/CHANGELOG.md +6883 -0
- package/CLAUDE.md +39 -0
- package/LICENSE +21 -0
- package/README.ko.md +245 -0
- package/README.md +277 -0
- package/agents/README.md +14 -0
- package/agents/a11y-reviewer.md +121 -0
- package/agents/component-architect.md +57 -0
- package/agents/design-critic.md +46 -0
- package/agents/token-extractor.md +63 -0
- package/cli/bin/design-ai-mcp.mjs +6 -0
- package/cli/bin/design-ai.mjs +40 -0
- package/cli/commands/audit.mjs +111 -0
- package/cli/commands/check.mjs +226 -0
- package/cli/commands/doctor.mjs +141 -0
- package/cli/commands/examples.mjs +58 -0
- package/cli/commands/help.mjs +271 -0
- package/cli/commands/install.mjs +161 -0
- package/cli/commands/learn.mjs +1871 -0
- package/cli/commands/list.mjs +143 -0
- package/cli/commands/mcp.mjs +27 -0
- package/cli/commands/pack.mjs +211 -0
- package/cli/commands/prompt.mjs +199 -0
- package/cli/commands/route.mjs +247 -0
- package/cli/commands/search.mjs +60 -0
- package/cli/commands/show.mjs +52 -0
- package/cli/commands/site.mjs +558 -0
- package/cli/commands/status.mjs +161 -0
- package/cli/commands/uninstall.mjs +119 -0
- package/cli/commands/update.mjs +184 -0
- package/cli/commands/version.mjs +94 -0
- package/cli/commands/workspace.mjs +176 -0
- package/cli/lib/brief.mjs +52 -0
- package/cli/lib/check.mjs +642 -0
- package/cli/lib/dispatch.mjs +109 -0
- package/cli/lib/doctor.mjs +505 -0
- package/cli/lib/examples.mjs +258 -0
- package/cli/lib/exec.mjs +63 -0
- package/cli/lib/help-flags.mjs +5 -0
- package/cli/lib/learn.mjs +3694 -0
- package/cli/lib/log.mjs +47 -0
- package/cli/lib/mcp-server.mjs +426 -0
- package/cli/lib/output.mjs +101 -0
- package/cli/lib/pack.mjs +599 -0
- package/cli/lib/paths.mjs +63 -0
- package/cli/lib/prompt.mjs +603 -0
- package/cli/lib/route.mjs +740 -0
- package/cli/lib/search.mjs +158 -0
- package/cli/lib/show.mjs +161 -0
- package/cli/lib/signals.mjs +2337 -0
- package/cli/lib/site.mjs +6617 -0
- package/cli/lib/skill-proposals.mjs +2046 -0
- package/cli/lib/suggest.mjs +66 -0
- package/cli/lib/workspace.mjs +1056 -0
- package/commands/README.md +25 -0
- package/commands/component-spec.md +34 -0
- package/commands/conversational.md +44 -0
- package/commands/design-from-brief.md +141 -0
- package/commands/design-review.md +62 -0
- package/commands/document-from-brief.md +47 -0
- package/commands/extract-tokens.md +38 -0
- package/commands/game-ui.md +40 -0
- package/commands/illustration.md +37 -0
- package/commands/iterate.md +167 -0
- package/commands/motion-design.md +54 -0
- package/commands/palette-from-brand.md +50 -0
- package/commands/print.md +49 -0
- package/commands/slide-deck.md +46 -0
- package/commands/spatial.md +47 -0
- package/commands/stability-review.md +74 -0
- package/commands/video.md +42 -0
- package/commands/website-improvement.md +77 -0
- package/docs/AGENT-DEVELOPMENT.md +658 -0
- package/docs/AI-LEARNING.md +429 -0
- package/docs/AIDER-INTEGRATION.md +224 -0
- package/docs/ARCHITECTURE.ko.md +183 -0
- package/docs/ARCHITECTURE.md +105 -0
- package/docs/CODEX-INTEGRATION.md +311 -0
- package/docs/COMPANY-WEBSITE-DOGFOOD.ko.md +144 -0
- package/docs/COMPANY-WEBSITE-DOGFOOD.md +150 -0
- package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.ko.md +153 -0
- package/docs/COMPANY-WEBSITE-INTAKE-TEMPLATE.md +154 -0
- package/docs/CONTRIBUTING.ko.md +203 -0
- package/docs/CONTRIBUTING.md +242 -0
- package/docs/CURSOR-INTEGRATION.md +220 -0
- package/docs/DISTRIBUTION.ko.md +248 -0
- package/docs/DISTRIBUTION.md +253 -0
- package/docs/DOGFOOD-FINDINGS.md +180 -0
- package/docs/DOGFOOD-V4-FINDINGS.md +139 -0
- package/docs/DOGFOOD-V4-MKDOCS-FINDINGS.md +233 -0
- package/docs/DOGFOOD-V4-NPM-FINDINGS.md +157 -0
- package/docs/DOGFOOD-V4-VSCODE-FINDINGS.md +135 -0
- package/docs/FIGMA-INTEGRATION.md +222 -0
- package/docs/MCP-INTEGRATION.md +243 -0
- package/docs/MIGRATION-v4.md +121 -0
- package/docs/PLUGIN-PACKAGING.md +240 -0
- package/docs/PRODUCT-READINESS.md +66 -0
- package/docs/QUICKSTART.ko.md +178 -0
- package/docs/QUICKSTART.md +179 -0
- package/docs/RELEASE-CHECKLIST.md +292 -0
- package/docs/ROADMAP.md +19495 -0
- package/docs/SESSION-LOG.md +940 -0
- package/docs/TOKEN-SYNC.md +237 -0
- package/docs/USING.ko.md +206 -0
- package/docs/USING.md +218 -0
- package/docs/WEBSITE-IMPROVEMENT.ko.md +75 -0
- package/docs/WEBSITE-IMPROVEMENT.md +89 -0
- package/docs/announcements/README.md +56 -0
- package/docs/announcements/dev-to-korea.md +206 -0
- package/docs/announcements/hashnode-post.ko.md +232 -0
- package/docs/announcements/okky-post.ko.md +158 -0
- package/docs/announcements/press-kit.md +101 -0
- package/docs/announcements/reddit-r-korea.md +196 -0
- package/docs/announcements/show-hn.md +114 -0
- package/docs/announcements/twitter-thread.md +255 -0
- package/docs/external-status.md +34 -0
- package/docs/integrations/aider-walkthrough.ko.md +275 -0
- package/docs/integrations/aider-walkthrough.md +274 -0
- package/docs/integrations/codex-walkthrough.ko.md +297 -0
- package/docs/integrations/codex-walkthrough.md +297 -0
- package/docs/integrations/cursor-walkthrough.ko.md +281 -0
- package/docs/integrations/cursor-walkthrough.md +284 -0
- package/docs/integrations/design-ai-mcp-server.md +169 -0
- package/docs/integrations/figma-mcp.md +149 -0
- package/docs/integrations/github-mcp.md +178 -0
- package/docs/integrations/linear-mcp.md +215 -0
- package/docs/integrations/notion-mcp.md +174 -0
- package/docs/integrations/sdk-walkthrough.ko.md +375 -0
- package/docs/integrations/sdk-walkthrough.md +375 -0
- package/docs/integrations/slack-mcp.md +208 -0
- package/docs/integrations/vscode-walkthrough.ko.md +202 -0
- package/docs/integrations/vscode-walkthrough.md +205 -0
- package/docs/requirements.txt +16 -0
- package/docs/site-overrides/extra.css +83 -0
- package/docs/site-overrides/favicon.svg +4 -0
- package/docs/site-overrides/logo.svg +10 -0
- package/docs/site-overrides/main.html +18 -0
- package/docs/website-console/app.js +2540 -0
- package/docs/website-console/index.html +24 -0
- package/docs/website-console/styles.css +975 -0
- package/examples/README.md +252 -0
- package/examples/cases/dogfood-v4-korean-hr-onboarding.md +356 -0
- package/examples/component-accordion-actions.md +153 -0
- package/examples/component-accordion-details.md +147 -0
- package/examples/component-accordion-summary.md +180 -0
- package/examples/component-accordion.md +229 -0
- package/examples/component-account-card.md +284 -0
- package/examples/component-address-input.md +260 -0
- package/examples/component-affix.md +190 -0
- package/examples/component-alert-dialog.md +210 -0
- package/examples/component-alert-title.md +77 -0
- package/examples/component-alert.md +192 -0
- package/examples/component-amount-input.md +278 -0
- package/examples/component-anchor.md +198 -0
- package/examples/component-app-bar.md +249 -0
- package/examples/component-aspect-ratio.md +156 -0
- package/examples/component-auto-complete.md +199 -0
- package/examples/component-avatar-group.md +170 -0
- package/examples/component-avatar.md +191 -0
- package/examples/component-back-top.md +123 -0
- package/examples/component-backdrop.md +148 -0
- package/examples/component-badge.md +181 -0
- package/examples/component-banner.md +237 -0
- package/examples/component-biometric-gate.md +281 -0
- package/examples/component-blockquote.md +153 -0
- package/examples/component-border-beam.md +207 -0
- package/examples/component-bottom-navigation.md +226 -0
- package/examples/component-box.md +112 -0
- package/examples/component-breadcrumb.md +222 -0
- package/examples/component-button-base.md +190 -0
- package/examples/component-button-group.md +117 -0
- package/examples/component-button.md +213 -0
- package/examples/component-calendar.md +280 -0
- package/examples/component-callout.md +131 -0
- package/examples/component-card-actions.md +101 -0
- package/examples/component-card-content.md +90 -0
- package/examples/component-card-header.md +122 -0
- package/examples/component-card-media.md +79 -0
- package/examples/component-card.md +233 -0
- package/examples/component-carousel.md +266 -0
- package/examples/component-cascader.md +135 -0
- package/examples/component-category-picker.md +271 -0
- package/examples/component-chart.md +237 -0
- package/examples/component-chat-interface.md +399 -0
- package/examples/component-checkbox.md +149 -0
- package/examples/component-click-away-listener.md +87 -0
- package/examples/component-code.md +213 -0
- package/examples/component-collapsible.md +219 -0
- package/examples/component-color-picker.md +110 -0
- package/examples/component-combobox.md +267 -0
- package/examples/component-command.md +299 -0
- package/examples/component-config-provider.md +190 -0
- package/examples/component-context-menu.md +179 -0
- package/examples/component-css-baseline.md +148 -0
- package/examples/component-date-picker.md +249 -0
- package/examples/component-descriptions.md +242 -0
- package/examples/component-dialog-actions.md +111 -0
- package/examples/component-dialog-content-text.md +76 -0
- package/examples/component-dialog-content.md +105 -0
- package/examples/component-dialog-title.md +104 -0
- package/examples/component-dialog.md +176 -0
- package/examples/component-divider.md +182 -0
- package/examples/component-doc-page.md +217 -0
- package/examples/component-drawer.md +257 -0
- package/examples/component-dropdown.md +220 -0
- package/examples/component-email-layout.md +253 -0
- package/examples/component-empty-state.md +269 -0
- package/examples/component-empty.md +172 -0
- package/examples/component-fade.md +87 -0
- package/examples/component-feature-grid.md +201 -0
- package/examples/component-field.md +266 -0
- package/examples/component-filled-input.md +114 -0
- package/examples/component-flex.md +117 -0
- package/examples/component-float-button.md +214 -0
- package/examples/component-form-control-label.md +134 -0
- package/examples/component-form-control.md +113 -0
- package/examples/component-form-controls.md +251 -0
- package/examples/component-form-group.md +86 -0
- package/examples/component-form-helper-text.md +95 -0
- package/examples/component-form-label.md +98 -0
- package/examples/component-form.md +291 -0
- package/examples/component-game-hud.md +362 -0
- package/examples/component-game-menu.md +327 -0
- package/examples/component-grid.md +140 -0
- package/examples/component-grow.md +79 -0
- package/examples/component-hero-block.md +252 -0
- package/examples/component-hover-card.md +211 -0
- package/examples/component-icon-button.md +142 -0
- package/examples/component-icon.md +102 -0
- package/examples/component-illustration.md +280 -0
- package/examples/component-image-list.md +107 -0
- package/examples/component-image.md +282 -0
- package/examples/component-input-adornment.md +101 -0
- package/examples/component-input-base.md +134 -0
- package/examples/component-input-number.md +141 -0
- package/examples/component-input-otp.md +271 -0
- package/examples/component-input.md +213 -0
- package/examples/component-item.md +243 -0
- package/examples/component-kbd.md +197 -0
- package/examples/component-krw-amount.md +219 -0
- package/examples/component-label.md +118 -0
- package/examples/component-layout.md +217 -0
- package/examples/component-link.md +223 -0
- package/examples/component-list-item-avatar.md +72 -0
- package/examples/component-list-item-button.md +139 -0
- package/examples/component-list-item-icon.md +82 -0
- package/examples/component-list-item-text.md +98 -0
- package/examples/component-list-item.md +116 -0
- package/examples/component-list-subheader.md +70 -0
- package/examples/component-list.md +198 -0
- package/examples/component-loading-button.md +125 -0
- package/examples/component-loading-sequence.md +254 -0
- package/examples/component-lottie-player.md +279 -0
- package/examples/component-masonry.md +191 -0
- package/examples/component-mentions.md +189 -0
- package/examples/component-menu-item.md +102 -0
- package/examples/component-menu-list.md +98 -0
- package/examples/component-menu.md +139 -0
- package/examples/component-menubar.md +259 -0
- package/examples/component-message.md +162 -0
- package/examples/component-mobile-stepper.md +155 -0
- package/examples/component-modal.md +220 -0
- package/examples/component-navigation-menu.md +295 -0
- package/examples/component-notification.md +166 -0
- package/examples/component-otp-countdown.md +245 -0
- package/examples/component-outlined-input.md +145 -0
- package/examples/component-page-transition.md +281 -0
- package/examples/component-pagination.md +226 -0
- package/examples/component-paper.md +199 -0
- package/examples/component-pass-auth.md +265 -0
- package/examples/component-payment-brand-button.md +253 -0
- package/examples/component-payment-method-selector.md +272 -0
- package/examples/component-payment-receipt.md +277 -0
- package/examples/component-popconfirm.md +144 -0
- package/examples/component-popover.md +239 -0
- package/examples/component-popper.md +129 -0
- package/examples/component-pricing-cards.md +247 -0
- package/examples/component-progress.md +195 -0
- package/examples/component-qr-code.md +201 -0
- package/examples/component-radio.md +167 -0
- package/examples/component-rate.md +202 -0
- package/examples/component-resizable.md +163 -0
- package/examples/component-result.md +270 -0
- package/examples/component-scroll-area.md +199 -0
- package/examples/component-scroll-reveal.md +320 -0
- package/examples/component-segmented.md +178 -0
- package/examples/component-select.md +258 -0
- package/examples/component-separator.md +177 -0
- package/examples/component-sheet.md +277 -0
- package/examples/component-sidebar.md +257 -0
- package/examples/component-skeleton.md +178 -0
- package/examples/component-slide.md +89 -0
- package/examples/component-slider.md +208 -0
- package/examples/component-snackbar-content.md +92 -0
- package/examples/component-snackbar.md +121 -0
- package/examples/component-sonner.md +165 -0
- package/examples/component-space.md +125 -0
- package/examples/component-spatial-locomotion.md +373 -0
- package/examples/component-spatial-panel.md +330 -0
- package/examples/component-speed-dial-action.md +78 -0
- package/examples/component-speed-dial.md +177 -0
- package/examples/component-spin.md +173 -0
- package/examples/component-spinner.md +204 -0
- package/examples/component-splitter.md +210 -0
- package/examples/component-stack.md +130 -0
- package/examples/component-statistic.md +282 -0
- package/examples/component-step-button.md +157 -0
- package/examples/component-step-connector.md +157 -0
- package/examples/component-step-content.md +121 -0
- package/examples/component-step-icon.md +115 -0
- package/examples/component-step-label.md +101 -0
- package/examples/component-step.md +84 -0
- package/examples/component-steps.md +264 -0
- package/examples/component-stock-chart.md +251 -0
- package/examples/component-swipeable-drawer.md +149 -0
- package/examples/component-switch.md +99 -0
- package/examples/component-tab-scroll-button.md +180 -0
- package/examples/component-tab.md +120 -0
- package/examples/component-table-body.md +82 -0
- package/examples/component-table-cell.md +118 -0
- package/examples/component-table-container.md +75 -0
- package/examples/component-table-footer.md +72 -0
- package/examples/component-table-head.md +78 -0
- package/examples/component-table-pagination.md +137 -0
- package/examples/component-table-row.md +113 -0
- package/examples/component-table-sort-label.md +109 -0
- package/examples/component-table.md +202 -0
- package/examples/component-tabs.md +184 -0
- package/examples/component-tag-badge.md +309 -0
- package/examples/component-tag.md +102 -0
- package/examples/component-testimonial-carousel.md +218 -0
- package/examples/component-textarea-autosize.md +114 -0
- package/examples/component-textarea.md +173 -0
- package/examples/component-time-picker.md +205 -0
- package/examples/component-timeline.md +170 -0
- package/examples/component-toast.md +224 -0
- package/examples/component-toggle-button.md +129 -0
- package/examples/component-toggle.md +220 -0
- package/examples/component-toolbar.md +104 -0
- package/examples/component-tooltip.md +178 -0
- package/examples/component-tour.md +176 -0
- package/examples/component-transaction-list-item.md +243 -0
- package/examples/component-transfer.md +156 -0
- package/examples/component-tree-select.md +202 -0
- package/examples/component-tree.md +297 -0
- package/examples/component-typography.md +215 -0
- package/examples/component-upload.md +295 -0
- package/examples/component-video-hero.md +409 -0
- package/examples/component-video-player.md +340 -0
- package/examples/component-voice-input.md +408 -0
- package/examples/component-watermark.md +217 -0
- package/examples/component-zoom.md +92 -0
- package/examples/doc-explanation-example.md +196 -0
- package/examples/doc-how-to-example.md +205 -0
- package/examples/doc-tutorial-example.md +162 -0
- package/examples/dogfood-korean-fintech-system.md +433 -0
- package/examples/email-transactional-example.md +259 -0
- package/examples/palette-saas-violet.md +235 -0
- package/examples/print-business-card-spec.md +205 -0
- package/examples/print-packaging-spec.md +285 -0
- package/examples/report-example.md +228 -0
- package/examples/slide-deck-example.md +237 -0
- package/examples/website-improvement-report.md +128 -0
- package/examples/website-improvement-workspace.json +126 -0
- package/install.sh +189 -0
- package/knowledge/COVERAGE.md +740 -0
- package/knowledge/PRINCIPLES.md +108 -0
- package/knowledge/a11y/contrast.md +70 -0
- package/knowledge/a11y/keyboard-and-focus.md +108 -0
- package/knowledge/colors/color-theory.md +90 -0
- package/knowledge/colors/mui-palette-structure.md +105 -0
- package/knowledge/colors/palettes-by-product-type.md +876 -0
- package/knowledge/components/INDEX.md +231 -0
- package/knowledge/components/index.json +1470 -0
- package/knowledge/components/shadcn-registry.md +159 -0
- package/knowledge/conversational/ai-chat-interfaces.md +323 -0
- package/knowledge/conversational/chatbot-design.md +312 -0
- package/knowledge/conversational/conversational-ui-fundamentals.md +299 -0
- package/knowledge/conversational/korean-voice-conventions.md +281 -0
- package/knowledge/conversational/voice-ui-patterns.md +297 -0
- package/knowledge/design-tokens/ant-design.md +124 -0
- package/knowledge/design-tokens/material-3.md +235 -0
- package/knowledge/design-tokens/polaris-and-carbon.md +231 -0
- package/knowledge/design-tokens/tailwind-v4.md +284 -0
- package/knowledge/game-ui/game-accessibility.md +317 -0
- package/knowledge/game-ui/game-ui-fundamentals.md +281 -0
- package/knowledge/game-ui/hud-design.md +324 -0
- package/knowledge/game-ui/korean-gaming-conventions.md +312 -0
- package/knowledge/game-ui/menu-systems.md +388 -0
- package/knowledge/i18n/korean-app-store-visual.md +223 -0
- package/knowledge/i18n/korean-document-style.md +301 -0
- package/knowledge/i18n/korean-payments.md +211 -0
- package/knowledge/i18n/korean-product-conventions.md +96 -0
- package/knowledge/i18n/korean-publishing.md +139 -0
- package/knowledge/i18n/korean-typography.md +123 -0
- package/knowledge/icons/curated-sets.md +225 -0
- package/knowledge/illustration/hero-illustrations.md +234 -0
- package/knowledge/illustration/illustration-systems.md +221 -0
- package/knowledge/illustration/mascot-design.md +208 -0
- package/knowledge/illustration/spot-illustrations.md +246 -0
- package/knowledge/illustration/svg-optimization.md +308 -0
- package/knowledge/layout/spacing-and-grid.md +119 -0
- package/knowledge/motion/app-loading-sequences.md +277 -0
- package/knowledge/motion/choreography-depth.md +297 -0
- package/knowledge/motion/marketing-motion.md +223 -0
- package/knowledge/motion/micro-interactions.md +266 -0
- package/knowledge/motion/motion-tools.md +281 -0
- package/knowledge/motion/principles.md +126 -0
- package/knowledge/patterns/auth-flow-design.md +316 -0
- package/knowledge/patterns/b2b-onboarding-flows.md +182 -0
- package/knowledge/patterns/brand-identity.md +238 -0
- package/knowledge/patterns/brand-references.md +97 -0
- package/knowledge/patterns/chart-color-encoding.md +269 -0
- package/knowledge/patterns/chart-types.md +344 -0
- package/knowledge/patterns/dashboard-composition.md +299 -0
- package/knowledge/patterns/design-system-qa.md +356 -0
- package/knowledge/patterns/document-typography.md +248 -0
- package/knowledge/patterns/email-design.md +338 -0
- package/knowledge/patterns/empty-states.md +263 -0
- package/knowledge/patterns/error-states.md +318 -0
- package/knowledge/patterns/form-design.md +237 -0
- package/knowledge/patterns/information-architecture.md +341 -0
- package/knowledge/patterns/landing-hero-design.md +283 -0
- package/knowledge/patterns/landing-page-patterns.md +681 -0
- package/knowledge/patterns/list-and-feed.md +371 -0
- package/knowledge/patterns/mobile-navigation.md +278 -0
- package/knowledge/patterns/money-and-amount.md +301 -0
- package/knowledge/patterns/onboarding.md +300 -0
- package/knowledge/patterns/pricing-page-design.md +261 -0
- package/knowledge/patterns/realtime-data.md +280 -0
- package/knowledge/patterns/report-design.md +330 -0
- package/knowledge/patterns/search-ux.md +373 -0
- package/knowledge/patterns/settings-page.md +325 -0
- package/knowledge/patterns/slide-deck-design.md +316 -0
- package/knowledge/patterns/styles-catalog.md +2599 -0
- package/knowledge/patterns/technical-writing.md +306 -0
- package/knowledge/patterns/ui-reasoning.md +1853 -0
- package/knowledge/patterns/ux-guidelines.md +1454 -0
- package/knowledge/platforms/react-native.md +395 -0
- package/knowledge/print/brochures-and-flyers.md +276 -0
- package/knowledge/print/korean-print-conventions.md +284 -0
- package/knowledge/print/packaging.md +321 -0
- package/knowledge/print/print-fundamentals.md +238 -0
- package/knowledge/print/signage-and-posters.md +235 -0
- package/knowledge/print/stationery.md +262 -0
- package/knowledge/spatial/ar-patterns.md +253 -0
- package/knowledge/spatial/comfort-and-accessibility.md +245 -0
- package/knowledge/spatial/spatial-design-fundamentals.md +346 -0
- package/knowledge/spatial/spatial-ui-elements.md +343 -0
- package/knowledge/spatial/vr-patterns.md +302 -0
- package/knowledge/typography/font-pairings.md +332 -0
- package/knowledge/typography/mui-type-scale.md +57 -0
- package/knowledge/typography/type-scale-fundamentals.md +105 -0
- package/knowledge/video/in-product-video.md +277 -0
- package/knowledge/video/korean-video-conventions.md +247 -0
- package/knowledge/video/marketing-video.md +258 -0
- package/knowledge/video/social-and-short-form.md +257 -0
- package/knowledge/video/video-fundamentals.md +296 -0
- package/package.json +106 -0
- package/skills/README.md +39 -0
- package/skills/color-palette/PLAYBOOK.md +175 -0
- package/skills/color-palette/SKILL.md +6 -0
- package/skills/color-palette/TEMPLATE.md +103 -0
- package/skills/component-spec-writer/PLAYBOOK.md +169 -0
- package/skills/component-spec-writer/SKILL.md +6 -0
- package/skills/component-spec-writer/TEMPLATE.md +115 -0
- package/skills/conversational-ui-designer/PLAYBOOK.md +231 -0
- package/skills/conversational-ui-designer/SKILL.md +6 -0
- package/skills/design-broadcast/PLAYBOOK.md +146 -0
- package/skills/design-broadcast/SKILL.md +6 -0
- package/skills/design-critique/PLAYBOOK.md +137 -0
- package/skills/design-critique/SKILL.md +6 -0
- package/skills/design-pr-review/PLAYBOOK.md +171 -0
- package/skills/design-pr-review/SKILL.md +6 -0
- package/skills/design-system-builder/PLAYBOOK.md +218 -0
- package/skills/design-system-builder/SKILL.md +6 -0
- package/skills/design-system-qa/PLAYBOOK.md +163 -0
- package/skills/design-system-qa/SKILL.md +6 -0
- package/skills/document-author/PLAYBOOK.md +167 -0
- package/skills/document-author/SKILL.md +6 -0
- package/skills/figma-token-sync/PLAYBOOK.md +149 -0
- package/skills/figma-token-sync/SKILL.md +6 -0
- package/skills/game-ui-designer/PLAYBOOK.md +209 -0
- package/skills/game-ui-designer/SKILL.md +6 -0
- package/skills/handoff-spec/PLAYBOOK.md +170 -0
- package/skills/handoff-spec/SKILL.md +6 -0
- package/skills/illustration-designer/PLAYBOOK.md +166 -0
- package/skills/illustration-designer/SKILL.md +6 -0
- package/skills/motion-designer/PLAYBOOK.md +223 -0
- package/skills/motion-designer/SKILL.md +6 -0
- package/skills/print-designer/PLAYBOOK.md +209 -0
- package/skills/print-designer/SKILL.md +6 -0
- package/skills/slide-deck-author/PLAYBOOK.md +198 -0
- package/skills/slide-deck-author/SKILL.md +6 -0
- package/skills/spatial-designer/PLAYBOOK.md +238 -0
- package/skills/spatial-designer/SKILL.md +6 -0
- package/skills/ux-audit/PLAYBOOK.md +142 -0
- package/skills/ux-audit/SKILL.md +6 -0
- package/skills/video-designer/PLAYBOOK.md +240 -0
- package/skills/video-designer/SKILL.md +6 -0
- package/skills/website-improvement/PLAYBOOK.md +118 -0
- package/skills/website-improvement/SKILL.md +6 -0
- package/skills/website-improvement/TEMPLATE.md +103 -0
- package/tools/audit/changelog-generate.py +176 -0
- package/tools/audit/check-coverage.py +483 -0
- package/tools/audit/doctor_assertions.py +256 -0
- package/tools/audit/example-qa.py +108 -0
- package/tools/audit/frontmatter-check.py +199 -0
- package/tools/audit/integration-check.py +95 -0
- package/tools/audit/korean-copy-check.py +161 -0
- package/tools/audit/link-check.py +146 -0
- package/tools/audit/local-ci.py +558 -0
- package/tools/audit/package-contents.py +723 -0
- package/tools/audit/package-smoke.py +22443 -0
- package/tools/audit/raw-hex-check.py +252 -0
- package/tools/audit/registry-smoke.py +8188 -0
- package/tools/audit/release-metadata.py +9832 -0
- package/tools/audit/run-all.py +351 -0
- package/tools/audit/smoke_assertions.py +12742 -0
- package/tools/audit/stability-review.py +332 -0
- package/tools/audit/stale-check.py +156 -0
- package/tools/migrations/add-version-frontmatter.py +132 -0
- package/tools/migrations/bump-last-updated.py +131 -0
- package/tools/migrations/promote-stability.py +172 -0
- package/tools/preview/README.md +58 -0
- package/tools/preview/render-tokens.py +454 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
# SDK walkthrough ā Anthropic + OpenAI
|
|
2
|
+
|
|
3
|
+
How to use design-ai inside your own code via the Anthropic SDK or OpenAI SDK. For when you're embedding design-aware AI into a product (not using a CLI agent).
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Get design-ai (just the corpus; no CLI install needed for SDK use)
|
|
9
|
+
git clone https://github.com/sungjin9288/design-ai.git ~/dev/design-ai
|
|
10
|
+
|
|
11
|
+
# Install your SDK of choice
|
|
12
|
+
pip install anthropic # or
|
|
13
|
+
pip install openai
|
|
14
|
+
|
|
15
|
+
# Set API key
|
|
16
|
+
export ANTHROPIC_API_KEY=...
|
|
17
|
+
# OR
|
|
18
|
+
export OPENAI_API_KEY=...
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Setup
|
|
22
|
+
|
|
23
|
+
For SDK adoption, design-ai is just markdown files. There's no install step ā your code reads them directly into the model's system prompt at runtime.
|
|
24
|
+
|
|
25
|
+
The pattern below loads a configurable subset of the corpus:
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
from pathlib import Path
|
|
29
|
+
|
|
30
|
+
DESIGN_AI = Path("/Users/you/dev/design-ai") # adjust to your clone path
|
|
31
|
+
|
|
32
|
+
def design_ai_path(rel: str) -> str:
|
|
33
|
+
return (DESIGN_AI / rel).read_text(encoding="utf-8")
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
That's it. The walkthroughs below build on this primitive.
|
|
37
|
+
|
|
38
|
+
## Pattern: design-ai as system prompt
|
|
39
|
+
|
|
40
|
+
design-ai is markdown. Load relevant files into the system prompt; the model treats them as authoritative context.
|
|
41
|
+
|
|
42
|
+
### Anatomy
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
System prompt =
|
|
46
|
+
AGENTS.md (universal entry)
|
|
47
|
+
+ knowledge/PRINCIPLES.md (single-page load-bearing rules)
|
|
48
|
+
+ skills/<skill>/PLAYBOOK.md (the active skill)
|
|
49
|
+
+ knowledge/<relevant>/<file>.md (per task)
|
|
50
|
+
|
|
51
|
+
User message =
|
|
52
|
+
"Apply the X skill: <task>"
|
|
53
|
+
|
|
54
|
+
Output =
|
|
55
|
+
Per the skill's template
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Walkthrough 1: Anthropic SDK + Sonnet
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
import anthropic
|
|
62
|
+
from pathlib import Path
|
|
63
|
+
|
|
64
|
+
DESIGN_AI = Path("/Users/you/dev/design-ai")
|
|
65
|
+
|
|
66
|
+
def load_skill_context(skill: str, knowledge_files: list[str]) -> str:
|
|
67
|
+
parts = [
|
|
68
|
+
(DESIGN_AI / "AGENTS.md").read_text(),
|
|
69
|
+
(DESIGN_AI / "knowledge/PRINCIPLES.md").read_text(),
|
|
70
|
+
(DESIGN_AI / f"skills/{skill}/PLAYBOOK.md").read_text(),
|
|
71
|
+
]
|
|
72
|
+
for k in knowledge_files:
|
|
73
|
+
parts.append((DESIGN_AI / k).read_text())
|
|
74
|
+
return "\n\n---\n\n".join(parts)
|
|
75
|
+
|
|
76
|
+
client = anthropic.Anthropic()
|
|
77
|
+
|
|
78
|
+
system = load_skill_context(
|
|
79
|
+
skill="component-spec-writer",
|
|
80
|
+
knowledge_files=[
|
|
81
|
+
"knowledge/components/INDEX.md",
|
|
82
|
+
"knowledge/i18n/korean-document-style.md",
|
|
83
|
+
"examples/component-banner.md", # reference for shape
|
|
84
|
+
],
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
message = client.messages.create(
|
|
88
|
+
model="claude-sonnet-4-6",
|
|
89
|
+
max_tokens=4096,
|
|
90
|
+
system=system,
|
|
91
|
+
messages=[
|
|
92
|
+
{"role": "user", "content": (
|
|
93
|
+
"Spec a Banner component for a Korean fintech app. "
|
|
94
|
+
"Persistent in-page strip for system status. Distinct from "
|
|
95
|
+
"Alert (inline) and Toast (transient). Variants: info / "
|
|
96
|
+
"success / warning / error / promo. Dismissible."
|
|
97
|
+
)},
|
|
98
|
+
],
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
print(message.content[0].text)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### With prompt caching (recommended)
|
|
105
|
+
|
|
106
|
+
For repeated calls with the same system prompt, use prompt caching to avoid re-paying for the corpus:
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
import anthropic
|
|
110
|
+
|
|
111
|
+
client = anthropic.Anthropic()
|
|
112
|
+
|
|
113
|
+
system_blocks = [
|
|
114
|
+
{
|
|
115
|
+
"type": "text",
|
|
116
|
+
"text": (DESIGN_AI / "AGENTS.md").read_text(),
|
|
117
|
+
"cache_control": {"type": "ephemeral"},
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"type": "text",
|
|
121
|
+
"text": (DESIGN_AI / "knowledge/PRINCIPLES.md").read_text(),
|
|
122
|
+
"cache_control": {"type": "ephemeral"},
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"type": "text",
|
|
126
|
+
"text": (DESIGN_AI / "skills/component-spec-writer/PLAYBOOK.md").read_text(),
|
|
127
|
+
"cache_control": {"type": "ephemeral"},
|
|
128
|
+
},
|
|
129
|
+
]
|
|
130
|
+
|
|
131
|
+
message = client.messages.create(
|
|
132
|
+
model="claude-sonnet-4-6",
|
|
133
|
+
max_tokens=4096,
|
|
134
|
+
system=system_blocks, # array of cache-aware blocks
|
|
135
|
+
messages=[{"role": "user", "content": "Spec a Banner component..."}],
|
|
136
|
+
)
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
The corpus contributes ~10-30K tokens to the prompt. With caching, after the first call, subsequent calls hit the cache (5-min TTL); cost drops by ~90%.
|
|
140
|
+
|
|
141
|
+
## Walkthrough 2: OpenAI SDK + GPT-4o
|
|
142
|
+
|
|
143
|
+
```python
|
|
144
|
+
import openai
|
|
145
|
+
from pathlib import Path
|
|
146
|
+
|
|
147
|
+
DESIGN_AI = Path("/Users/you/dev/design-ai")
|
|
148
|
+
|
|
149
|
+
def load_skill_context(skill: str, knowledge_files: list[str]) -> str:
|
|
150
|
+
parts = [
|
|
151
|
+
(DESIGN_AI / "AGENTS.md").read_text(),
|
|
152
|
+
(DESIGN_AI / "knowledge/PRINCIPLES.md").read_text(),
|
|
153
|
+
(DESIGN_AI / f"skills/{skill}/PLAYBOOK.md").read_text(),
|
|
154
|
+
]
|
|
155
|
+
for k in knowledge_files:
|
|
156
|
+
parts.append((DESIGN_AI / k).read_text())
|
|
157
|
+
return "\n\n---\n\n".join(parts)
|
|
158
|
+
|
|
159
|
+
client = openai.OpenAI()
|
|
160
|
+
|
|
161
|
+
system = load_skill_context(
|
|
162
|
+
skill="color-palette",
|
|
163
|
+
knowledge_files=[
|
|
164
|
+
"knowledge/colors/color-theory.md",
|
|
165
|
+
"knowledge/colors/palettes-by-product-type.md",
|
|
166
|
+
"knowledge/i18n/korean-typography.md",
|
|
167
|
+
],
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
response = client.chat.completions.create(
|
|
171
|
+
model="gpt-4o",
|
|
172
|
+
messages=[
|
|
173
|
+
{"role": "system", "content": system},
|
|
174
|
+
{"role": "user", "content": (
|
|
175
|
+
"Generate a full palette for a Korean fintech for freelancers. "
|
|
176
|
+
"Brand: trustworthy, calm, modern. Seed: oklch(56% 0.16 244)."
|
|
177
|
+
)},
|
|
178
|
+
],
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
print(response.choices[0].message.content)
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
OpenAI's prompt caching (auto-detected for `messages` ā„ 1024 tokens) handles the cost savings without explicit `cache_control`.
|
|
185
|
+
|
|
186
|
+
## Walkthrough 3: Streaming for long outputs
|
|
187
|
+
|
|
188
|
+
For long design system bootstraps, streaming UX is essential:
|
|
189
|
+
|
|
190
|
+
```python
|
|
191
|
+
with client.messages.stream(
|
|
192
|
+
model="claude-sonnet-4-6",
|
|
193
|
+
max_tokens=8192,
|
|
194
|
+
system=system_blocks,
|
|
195
|
+
messages=[{"role": "user", "content": "Apply design-system-builder..."}],
|
|
196
|
+
) as stream:
|
|
197
|
+
for chunk in stream.text_stream:
|
|
198
|
+
print(chunk, end="", flush=True)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
OpenAI equivalent:
|
|
202
|
+
|
|
203
|
+
```python
|
|
204
|
+
stream = client.chat.completions.create(
|
|
205
|
+
model="gpt-4o",
|
|
206
|
+
messages=[{"role": "system", "content": system}, {"role": "user", "content": "..."}],
|
|
207
|
+
stream=True,
|
|
208
|
+
)
|
|
209
|
+
for chunk in stream:
|
|
210
|
+
if chunk.choices[0].delta.content:
|
|
211
|
+
print(chunk.choices[0].delta.content, end="", flush=True)
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Walkthrough 4: Tool use for multi-skill workflows
|
|
215
|
+
|
|
216
|
+
Use the model's tool-use capability to chain skills:
|
|
217
|
+
|
|
218
|
+
```python
|
|
219
|
+
tools = [
|
|
220
|
+
{
|
|
221
|
+
"name": "apply_skill",
|
|
222
|
+
"description": "Apply a design-ai skill. Returns the skill's playbook for the model to follow.",
|
|
223
|
+
"input_schema": {
|
|
224
|
+
"type": "object",
|
|
225
|
+
"properties": {
|
|
226
|
+
"skill": {
|
|
227
|
+
"type": "string",
|
|
228
|
+
"enum": ["color-palette", "component-spec-writer", "ux-audit", "..."],
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
"required": ["skill"],
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"name": "read_knowledge",
|
|
236
|
+
"description": "Read a knowledge file from the design-ai corpus.",
|
|
237
|
+
"input_schema": {
|
|
238
|
+
"type": "object",
|
|
239
|
+
"properties": {"path": {"type": "string"}},
|
|
240
|
+
"required": ["path"],
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
]
|
|
244
|
+
|
|
245
|
+
# When the model calls apply_skill or read_knowledge, your handler reads
|
|
246
|
+
# the corresponding markdown file and returns its content as the tool result.
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
This lets the model dynamically choose what to read instead of forcing all context into the initial system prompt.
|
|
250
|
+
|
|
251
|
+
## Walkthrough 5: Production app ā design-aware chatbot
|
|
252
|
+
|
|
253
|
+
A practical example: a chatbot that answers design questions for your team, grounded in design-ai.
|
|
254
|
+
|
|
255
|
+
```python
|
|
256
|
+
from anthropic import Anthropic
|
|
257
|
+
from pathlib import Path
|
|
258
|
+
|
|
259
|
+
DESIGN_AI = Path("/Users/you/dev/design-ai")
|
|
260
|
+
client = Anthropic()
|
|
261
|
+
|
|
262
|
+
# Pre-load corpus into a single cached system prompt.
|
|
263
|
+
def build_system() -> list[dict]:
|
|
264
|
+
return [
|
|
265
|
+
{
|
|
266
|
+
"type": "text",
|
|
267
|
+
"text": (DESIGN_AI / "AGENTS.md").read_text(),
|
|
268
|
+
"cache_control": {"type": "ephemeral"},
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"type": "text",
|
|
272
|
+
"text": (DESIGN_AI / "knowledge/PRINCIPLES.md").read_text(),
|
|
273
|
+
"cache_control": {"type": "ephemeral"},
|
|
274
|
+
},
|
|
275
|
+
# Pre-include the most-asked playbooks
|
|
276
|
+
*[
|
|
277
|
+
{
|
|
278
|
+
"type": "text",
|
|
279
|
+
"text": (DESIGN_AI / f"skills/{s}/PLAYBOOK.md").read_text(),
|
|
280
|
+
"cache_control": {"type": "ephemeral"},
|
|
281
|
+
}
|
|
282
|
+
for s in ["component-spec-writer", "color-palette", "ux-audit"]
|
|
283
|
+
],
|
|
284
|
+
]
|
|
285
|
+
|
|
286
|
+
SYSTEM = build_system()
|
|
287
|
+
|
|
288
|
+
def ask(question: str) -> str:
|
|
289
|
+
response = client.messages.create(
|
|
290
|
+
model="claude-sonnet-4-6",
|
|
291
|
+
max_tokens=4096,
|
|
292
|
+
system=SYSTEM,
|
|
293
|
+
messages=[{"role": "user", "content": question}],
|
|
294
|
+
)
|
|
295
|
+
return response.content[0].text
|
|
296
|
+
|
|
297
|
+
# Use:
|
|
298
|
+
print(ask("What's the canonical Toast vs Alert vs Banner distinction?"))
|
|
299
|
+
print(ask("How should I compose a Form using shadcn primitives?"))
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
For a Slack bot / Discord bot / web chat: wrap `ask()` in your platform's HTTP handler. Cache hit-rate stays high; per-question cost drops to ~$0.001-0.005 with Sonnet.
|
|
303
|
+
|
|
304
|
+
## Tips for SDK adoption
|
|
305
|
+
|
|
306
|
+
### Cost control
|
|
307
|
+
|
|
308
|
+
- **Cache the corpus**: 90% cost reduction on repeat calls.
|
|
309
|
+
- **Load only what's needed**: don't include all 92 knowledge files. Per-task selection (3-7 files) is plenty.
|
|
310
|
+
- **Use Haiku for simpler tasks**: color-palette generation works fine on Haiku (5Ć cheaper). Reserve Sonnet/Opus for design-system-builder, ux-audit (complex synthesis).
|
|
311
|
+
|
|
312
|
+
### Output structure
|
|
313
|
+
|
|
314
|
+
design-ai skills produce predictable structures (anatomy / API / states / tokens / a11y). For programmatic post-processing:
|
|
315
|
+
- Parse markdown into sections via headings.
|
|
316
|
+
- Or instruct the model to output JSON: "Same content, but as JSON with keys: anatomy, api, states, tokens, a11y, edgeCases."
|
|
317
|
+
|
|
318
|
+
### Integration with your product
|
|
319
|
+
|
|
320
|
+
Common patterns:
|
|
321
|
+
- **Design assistant chatbot** ā Q&A bot for design teams.
|
|
322
|
+
- **PR comment bot** ā auto-review design PRs against the corpus.
|
|
323
|
+
- **Internal docs generator** ā turn brand brief ā design system docs.
|
|
324
|
+
- **Token sync agent** ā compare Figma tokens to code tokens, suggest reconciliation.
|
|
325
|
+
- **Pre-flight check** ā before shipping a component, audit it via design-system-qa.
|
|
326
|
+
|
|
327
|
+
### Korean output
|
|
328
|
+
|
|
329
|
+
Same as other agents: load `knowledge/i18n/` files for Korean tasks; prompt explicitly for ķ“ģ첓 / ķ©ģ¼ģ²“ register.
|
|
330
|
+
|
|
331
|
+
## Reference projects
|
|
332
|
+
|
|
333
|
+
This pattern mirrors how Anthropic's own internal design tooling and other open-source projects load corpus context. Notable similar approaches:
|
|
334
|
+
- **Continue.dev** ā code-context-aware coding assistants.
|
|
335
|
+
- **Claude Code itself** ā uses skills + agents the same way at the SDK level.
|
|
336
|
+
- **Cursor / Windsurf / Codeium** ā workspace-aware editors that load relevant docs.
|
|
337
|
+
|
|
338
|
+
## Troubleshooting
|
|
339
|
+
|
|
340
|
+
### "Context too large" errors
|
|
341
|
+
|
|
342
|
+
Reduce loaded files. Default load:
|
|
343
|
+
- AGENTS.md (~3K tokens)
|
|
344
|
+
- PRINCIPLES.md (~5K tokens)
|
|
345
|
+
- One skill PLAYBOOK (~3-8K tokens)
|
|
346
|
+
- 1-3 knowledge files (~3-15K tokens each)
|
|
347
|
+
|
|
348
|
+
Total: 15-50K tokens. Well within Sonnet 4.6 (200K) / GPT-4o (128K). If you're loading more, you're probably loading too much.
|
|
349
|
+
|
|
350
|
+
### Model ignores skill conventions
|
|
351
|
+
|
|
352
|
+
The skill PLAYBOOK has a "verification phase" checklist at the end. Prompt the model to apply it:
|
|
353
|
+
|
|
354
|
+
```
|
|
355
|
+
"After producing your output, run the verification phase from the
|
|
356
|
+
playbook. List any items that fail and adjust."
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### Korean conventions ignored
|
|
360
|
+
|
|
361
|
+
Either load `i18n/` files explicitly OR add to system prompt:
|
|
362
|
+
|
|
363
|
+
```
|
|
364
|
+
"Audience is Korean B2C. Apply ķ“ģ첓 voice. Use Pretendard
|
|
365
|
+
typography defaults. Follow knowledge/i18n/ conventions."
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
## Next
|
|
369
|
+
|
|
370
|
+
- [`docs/integrations/codex-walkthrough.md`](codex-walkthrough.md) ā Codex CLI
|
|
371
|
+
- [`docs/integrations/cursor-walkthrough.md`](cursor-walkthrough.md) ā Cursor
|
|
372
|
+
- [`docs/integrations/aider-walkthrough.md`](aider-walkthrough.md) ā Aider
|
|
373
|
+
- [`docs/MCP-INTEGRATION.md`](../MCP-INTEGRATION.md) ā MCP servers (alternative to SDK loading)
|
|
374
|
+
- [Anthropic SDK docs](https://docs.anthropic.com/) ā prompt caching reference
|
|
375
|
+
- [OpenAI SDK docs](https://platform.openai.com/docs) ā caching reference
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# Slack MCP integration
|
|
2
|
+
|
|
3
|
+
Use Slack MCP to broadcast design-ai outputs to a team channel: design review summaries, palette updates, audit reports, token version bumps.
|
|
4
|
+
|
|
5
|
+
## Available tools (when Slack MCP connected)
|
|
6
|
+
|
|
7
|
+
After authenticating via `mcp__plugin_design_slack__authenticate`:
|
|
8
|
+
|
|
9
|
+
| Tool | What it does |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `send_message` | Post to a channel or DM |
|
|
12
|
+
| `list_channels` | Find channels by name |
|
|
13
|
+
| `find_user` | Look up user by name/email |
|
|
14
|
+
| `upload_file` | Attach a file (image, doc) |
|
|
15
|
+
| `update_message` | Edit a previously-sent message (for status updates) |
|
|
16
|
+
| `react_to_message` | Add emoji reaction |
|
|
17
|
+
|
|
18
|
+
## Workflow A: post a design review summary
|
|
19
|
+
|
|
20
|
+
After running `/design-review`, post the summary to `#design-reviews`.
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
You: Review this Figma frame and post the summary to #design.
|
|
24
|
+
Agent:
|
|
25
|
+
1. [optional: Figma MCP to read the frame]
|
|
26
|
+
2. Apply commands/design-review.md.
|
|
27
|
+
3. slack__list_channels(query="design") ā find channel ID.
|
|
28
|
+
4. slack__send_message(
|
|
29
|
+
channel="C012ABC",
|
|
30
|
+
text="*Design review: <frame name>*",
|
|
31
|
+
blocks=<formatted summary>
|
|
32
|
+
)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Workflow B: notify on token version bump
|
|
36
|
+
|
|
37
|
+
When tokens change, ping the design + frontend channels.
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
You: We just bumped tokens/source.json. Notify the team.
|
|
41
|
+
Agent:
|
|
42
|
+
1. tools/audit/changelog-generate.py ā diff vs last tag.
|
|
43
|
+
2. Compose summary: which tokens changed, impact on components.
|
|
44
|
+
3. slack__send_message(
|
|
45
|
+
channel="#design-system",
|
|
46
|
+
blocks=[
|
|
47
|
+
{ type: "header", text: "šØ Tokens v1.5.0" },
|
|
48
|
+
{ type: "section", text: "Changed --color-primary from #1976D2 to #0D9488..." },
|
|
49
|
+
{ type: "actions", elements: [
|
|
50
|
+
{ type: "button", text: "View PR", url: "..." }
|
|
51
|
+
]}
|
|
52
|
+
]
|
|
53
|
+
)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Workflow C: share a palette artifact
|
|
57
|
+
|
|
58
|
+
When generating a palette via `/palette-from-brand`, optionally share the result.
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
You: Generate a palette for "trustworthy + youthful" and post it to #design.
|
|
62
|
+
Agent:
|
|
63
|
+
1. Apply skills/color-palette/PLAYBOOK.md.
|
|
64
|
+
2. python3 tools/preview/render-tokens.py /tmp/palette.md
|
|
65
|
+
[generates palette.preview.html]
|
|
66
|
+
3. slack__upload_file(
|
|
67
|
+
channels=["#design"],
|
|
68
|
+
file=palette.preview.html,
|
|
69
|
+
title="Trustworthy + Youthful palette",
|
|
70
|
+
initial_comment="Generated by design-ai. Open the HTML to compare light/dark."
|
|
71
|
+
)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Workflow D: weekly status post
|
|
75
|
+
|
|
76
|
+
Auto-generate a weekly status post.
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
[scheduled / on-demand]
|
|
80
|
+
Agent:
|
|
81
|
+
1. python3 tools/audit/check-coverage.py ā current numbers.
|
|
82
|
+
2. tools/audit/changelog-generate.py ā recent commits.
|
|
83
|
+
3. Compose: components added, coverage %, audit results.
|
|
84
|
+
4. slack__send_message(
|
|
85
|
+
channel="#design-system",
|
|
86
|
+
text="*Design system weekly: 2026-05-08*",
|
|
87
|
+
blocks=[<formatted update>]
|
|
88
|
+
)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Workflow E: ping responders on Critical audit findings
|
|
92
|
+
|
|
93
|
+
When `skills/ux-audit` finds Critical issues, alert the appropriate person.
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
You: Audit the new signup flow.
|
|
97
|
+
Agent:
|
|
98
|
+
1. Apply skills/ux-audit/PLAYBOOK.md.
|
|
99
|
+
2. If Critical findings:
|
|
100
|
+
- slack__find_user(query="design-lead@company.com")
|
|
101
|
+
- slack__send_message(
|
|
102
|
+
channel="@<that user>",
|
|
103
|
+
text="UX audit found 2 Critical issues in signup flow:..."
|
|
104
|
+
)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Slack message formatting
|
|
108
|
+
|
|
109
|
+
Slack uses **mrkdwn** (slightly different from regular markdown) plus block kit for richer messages.
|
|
110
|
+
|
|
111
|
+
### mrkdwn vs markdown
|
|
112
|
+
|
|
113
|
+
| Feature | mrkdwn | regular MD |
|
|
114
|
+
| --- | --- | --- |
|
|
115
|
+
| Bold | `*bold*` | `**bold**` |
|
|
116
|
+
| Italic | `_italic_` | `*italic*` |
|
|
117
|
+
| Strikethrough | `~strike~` | `~~strike~~` |
|
|
118
|
+
| Code | `` `code` `` | `` `code` `` |
|
|
119
|
+
| Code block | ` ``` ` | ` ``` ` |
|
|
120
|
+
| Link | `<url\|text>` | `[text](url)` |
|
|
121
|
+
| Mention | `<@U123>` | ā |
|
|
122
|
+
| Channel | `<#C123>` | ā |
|
|
123
|
+
|
|
124
|
+
### Block kit (richer formatting)
|
|
125
|
+
|
|
126
|
+
For multi-section posts, use block kit JSON:
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
[
|
|
130
|
+
{
|
|
131
|
+
"type": "header",
|
|
132
|
+
"text": { "type": "plain_text", "text": "šØ Design review: Signup flow" }
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"type": "section",
|
|
136
|
+
"text": { "type": "mrkdwn", "text": "*2 critical, 5 high, 3 medium*" }
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"type": "divider"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"type": "section",
|
|
143
|
+
"text": { "type": "mrkdwn", "text": "*Critical*\n⢠Contrast 3.2:1 on body text\n⢠Missing focus indicators on form" }
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"type": "actions",
|
|
147
|
+
"elements": [
|
|
148
|
+
{ "type": "button", "text": { "type": "plain_text", "text": "View full report" }, "url": "..." }
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
]
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Setup
|
|
155
|
+
|
|
156
|
+
### Authentication
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
# In agent:
|
|
160
|
+
mcp__plugin_design_slack__authenticate
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
OAuth ā user grants Slack workspace access. Choose scopes:
|
|
164
|
+
- `chat:write` (send messages)
|
|
165
|
+
- `chat:write.public` (post to channels you're not in)
|
|
166
|
+
- `files:write` (upload files)
|
|
167
|
+
- `channels:read` (list channels)
|
|
168
|
+
- `users:read.email` (find users by email)
|
|
169
|
+
|
|
170
|
+
### Channel selection
|
|
171
|
+
|
|
172
|
+
Common channels for design-ai:
|
|
173
|
+
- `#design` ā general design conversation
|
|
174
|
+
- `#design-reviews` ā review posts
|
|
175
|
+
- `#design-system` ā design system updates, token bumps
|
|
176
|
+
- `#design-debt` ā audit findings
|
|
177
|
+
|
|
178
|
+
Confirm channel naming with the team before posting.
|
|
179
|
+
|
|
180
|
+
## Privacy
|
|
181
|
+
|
|
182
|
+
- Slack auth has access to channels the user can see. Audit per workspace.
|
|
183
|
+
- Don't auto-post sensitive content (Figma URLs of unreleased designs, internal customer data) to public channels.
|
|
184
|
+
- For private design discussions: post to a private design channel + notify via DM.
|
|
185
|
+
- Slack messages are searchable indefinitely ā assume public.
|
|
186
|
+
|
|
187
|
+
## Common pitfalls
|
|
188
|
+
|
|
189
|
+
| Pitfall | Fix |
|
|
190
|
+
| --- | --- |
|
|
191
|
+
| Message rate limit (1 msg/sec/channel) | Throttle. Don't post in tight loop. |
|
|
192
|
+
| Bot can't post to channel | Add the bot to the channel: `/invite @your-bot-name` |
|
|
193
|
+
| User mention not pinging | Use `<@U123>` (the user ID), not `@username` (the display name) |
|
|
194
|
+
| Block kit JSON malformed | Use Slack's Block Kit Builder to validate before sending |
|
|
195
|
+
| Markdown not rendering | Slack uses mrkdwn ā check the conversion |
|
|
196
|
+
|
|
197
|
+
## When Slack MCP is unavailable
|
|
198
|
+
|
|
199
|
+
`design-broadcast` skill falls back to:
|
|
200
|
+
- Outputting the message as plain text the user can copy/paste.
|
|
201
|
+
- Or generating a Slack-shareable link to a Notion/GitHub page (via Notion/GitHub MCPs if available).
|
|
202
|
+
|
|
203
|
+
## Cross-reference
|
|
204
|
+
|
|
205
|
+
- [`docs/MCP-INTEGRATION.md`](../MCP-INTEGRATION.md) ā overview
|
|
206
|
+
- [`skills/design-broadcast/PLAYBOOK.md`](../../skills/design-broadcast/PLAYBOOK.md) ā uses Slack + Notion
|
|
207
|
+
- [`docs/integrations/notion-mcp.md`](notion-mcp.md) ā companion for capturing decisions
|
|
208
|
+
- Slack [Block Kit Builder](https://app.slack.com/block-kit-builder) ā interactive formatter
|