npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@xyz/studio

v0.1.0

Published

XYZ Studio CLI: design and redesign websites through AI coding CLIs

Downloads

113

Readme

@xyz/studio

The studio CLI and the createStudio() library API: capture a website, redesign it with your prompts through Claude Code, screenshot, publish and email the result.

Quick start

Needs Node 20+ and Claude Code installed and logged in.

npx @xyz/studio init my-client --name "My Client" --url https://example.com --email-provider stub
cd my-client
npx @xyz/studio doctor --fix          # checks the setup and installs the chromium build studio needs
npx @xyz/studio redesign create https://example.com "Give this page a modern refresh" --workflow quick
npx @xyz/studio runs open <run-id>    # view the result
npx @xyz/studio dashboard --root ~/Clients   # or do all of this in the local dashboard (browser, 127.0.0.1 only)

Or install it once: npm install -g @xyz/studio, then run studio ….

The configuration guide (prompts, skills, steps, pages, variants, models, the dashboard) ships in this package as dist/guide.md. The rest of this file is the command reference.

Every command accepts the global options below. With --json, a command prints exactly one envelope on stdout, { ok, command, data, warnings, error? }, and sends its logs to stderr. Exit codes: 0 ok (a partial run included), 1 failed, 2 usage error, 3 blocked (engine missing or logged out, preview service unreachable, capture blocked by the site).

The sections below are the commands' own --help output. Regenerate them after changing a command: build, then run each studio <command> --help.

Library

import { createStudio } from '@xyz/studio'

const studio = createStudio({ workspaceDir: '/path/to/workspace' })
const outcome = await studio.design('Landing page for a Bahrain coffee roaster', { variants: 3 })
console.log(outcome.status, outcome.record.variants)

createStudio exposes run, design, redesign, resume, runs, skills, workflows, capture, screenshot and offer. A non-zero exit code comes back in the outcome instead of being thrown.

studio

Usage: studio [options] [command]

XYZ Studio: design and redesign websites through AI coding CLIs

Options:
  -V, --version                    print the studio version
  --json                           print a JSON envelope on stdout; logs go to
                                   stderr (default: false)
  --workspace <dir>                workspace directory (default: nearest parent
                                   with .xyz/)
  --verbose                        verbose logging on stderr (default: false)
  --no-color                       disable colored output
  --yes                            answer yes to confirmations (default: false)
  --force                          overwrite existing files and redo completed
                                   work (default: false)
  -h, --help                       display help for command

Commands:
  init [options] [dir]             create a client workspace (.xyz/,
                                   prospects.json, runs/, outbox/, captures/)
  doctor [options]                 check node, pnpm, the workspace, the engine,
                                   chromium, the preview service, email, skills
                                   and workflows
  skills                           list, inspect and copy skill packs
  workflows                        list, inspect and validate workflows
  capture [options] <url>          capture a live page: inert HTML, text,
                                   structure, images and before screenshots
  screenshot [options] <runId>     capture desktop (and optionally mobile)
                                   screenshots of every variant of a run
  run [options] <workflow>         run a workflow; --step/--from rerun steps of
                                   an existing run
  design                           brief-driven design runs
  redesign                         redesigns of an existing website
  runs                             list, inspect, open and resume runs
  publish [options] <runId>        upload a run’s variants to the preview
                                   service and save the receipt to publish.json
  stats [options] <runIdOrSiteId>  opens, views and clicks for a published run
                                   or site
  offer                            offer pipeline: import prospects, prepare,
                                   review and send offer emails, track them
  dashboard [options]              serve the local dashboard on 127.0.0.1
                                   (clients, workflows, runs); Ctrl-C to stop
  help [command]                   display help for command

studio init

Usage: studio init [options] [dir]

create a client workspace (.xyz/, prospects.json, runs/, outbox/, captures/)

Options:
  --name <name>                workspace and client name (default: the directory
                               name)
  --url <url>                  client website URL
  --email-provider <provider>  resend, smtp or stub (default: "stub")
  --preview-url <url>          preview service URL
  -h, --help                   display help for command

studio doctor

Usage: studio doctor [options]

check node, pnpm, the workspace, the engine, chromium, the preview service,
email, skills and workflows

Options:
  --live      also run the engine once ("Reply with OK", --max-budget-usd 0.05)
              (default: false)
  --fix       repair what can be repaired automatically (installs Playwright
              chromium) (default: false)
  -h, --help  display help for command

studio skills list

Usage: studio skills list [options]

global and workspace skills, with the workflows that use them

Options:
  -h, --help  display help for command

studio skills show

Usage: studio skills show [options] <name>

print a skill: source, digest, files and SKILL.md

Options:
  -h, --help  display help for command

studio skills add

Usage: studio skills add [options] <source>

copy a global skill, a local directory or a git repository into .xyz/skills/

Options:
  --as <name>      install under a different name
  --subdir <path>  directory inside the git repository that holds the skill
  -h, --help       display help for command

studio workflows list

Usage: studio workflows list [options]

list global and workspace workflows

Options:
  -h, --help  display help for command

studio workflows show

Usage: studio workflows show [options] <name>

print a workflow, where it was resolved from, and any graph problems

Options:
  -h, --help  display help for command

studio workflows validate

Usage: studio workflows validate [options] <name>

check a workflow against the schema and graph rules; exit 1 when it has problems

Options:
  -h, --help  display help for command

studio capture

Usage: studio capture [options] <url>

capture a live page: inert HTML, text, structure, images and before screenshots

Arguments:
  url                   page to capture (https:// is assumed when no scheme is
                        given)

Options:
  --out <dir>           output directory (default:
                        captures/<host>-<yyyymmdd-hhmm>/)
  --viewport <WxH>      viewport size (default: "1280x800")
  --timeout <ms>        navigation timeout in milliseconds (default: "45000")
  --max-assets <n>      maximum number of images to download (default: "50")
  --no-dismiss-banners  do not try to close cookie/consent banners
  --no-crawl            capture this page only (no site map crawl)
  --max-pages <n>       pages to capture including the home page (1–50; default:
                        capture.crawl.maxPages or 12)
  --max-depth <n>       link hops from the home page (1–5; default:
                        capture.crawl.maxDepth or 2)
  --include <glob>      only crawl URL paths matching this glob, e.g. /blog/**
                        (repeatable) (default: [])
  --exclude <glob>      never crawl URL paths matching this glob (repeatable)
                        (default: [])
  -h, --help            display help for command

studio run

Usage: studio run [options] <workflow>

run a workflow; --step/--from rerun steps of an existing run

Arguments:
  workflow             workflow name (.xyz/workflows/ first, then global) or
                       path to a workflow file

Options:
  --input <key=value>  workflow input (repeatable) (default: [])
  --set <path=value>   one-off workflow override, e.g.
                       steps.build.with.model=opus (repeatable) (default: [])
  --run <id>           existing run to operate on with --step/--from (default:
                       the latest run of this workflow)
  --step <id>          rerun only this step of an existing run
  --from <id>          rerun this step and every later step of an existing run,
                       reusing earlier outputs
  --dry-run            write steps/*/prompt.md without calling any engine
                       (default: false)
  --strict             fail the run when an onFail loop runs out of attempts
                       (default: false)
  --require-all        exit 1 when the run is partial (default: false)
  -h, --help           display help for command

studio design create

Usage: studio design create [options] <brief>

design new variants from a brief (sugar over `studio run design --input
brief=…`)

Arguments:
  brief                   what to design: business, audience, goals, must-haves

Options:
  --variants <n>          number of variants (workflow input `variants`)
  --pages <pages>         pages per variant (workflow input `pages`): redesign,
                          the most pages including home (default 5); design,
                          page names such as home,menu,contact
  --model <model>         engine model for every agent step
  --skill <name>          extra skill for every agent step (repeatable)
                          (default: [])
  --workflow <name>       workflow to run instead of the workspace default
  --no-screenshot         skip the screenshot step
  --publish               publish the variants to the preview service at the end
                          (default: false)
  --max-budget-usd <usd>  engine budget cap for every agent step
  --timeout <duration>    engine timeout for every agent step (ms, or 90s / 25m
                          / 1h)
  --require-all           exit 1 when the run is partial (default: false)
  --strict                fail the run when an onFail loop runs out of attempts
                          (default: false)
  --dry-run               write steps/*/prompt.md without calling any engine
                          (default: false)
  --capture <dir>         reuse an existing capture bundle instead of capturing
                          the site
  --prospect <id>         prospect from prospects.json: fills the url and
                          records the run on the prospect
  --compile-css           compile Tailwind into each variant's
                          assets/tailwind.css (replaces the CDN script; needs
                          @tailwindcss/cli or pnpm dlx) (default: false)
  -h, --help              display help for command

studio redesign create

Usage: studio redesign create [options] [url] [brief]

capture a site and design redesign variants (sugar over `studio run redesign
--input url=…`)

Arguments:
  url                     the site to redesign (optional with --prospect)
  brief                   extra direction for the redesign

Options:
  --variants <n>          number of variants (workflow input `variants`)
  --pages <pages>         pages per variant (workflow input `pages`): redesign,
                          the most pages including home (default 5); design,
                          page names such as home,menu,contact
  --model <model>         engine model for every agent step
  --skill <name>          extra skill for every agent step (repeatable)
                          (default: [])
  --workflow <name>       workflow to run instead of the workspace default
  --no-screenshot         skip the screenshot step
  --publish               publish the variants to the preview service at the end
                          (default: false)
  --max-budget-usd <usd>  engine budget cap for every agent step
  --timeout <duration>    engine timeout for every agent step (ms, or 90s / 25m
                          / 1h)
  --require-all           exit 1 when the run is partial (default: false)
  --strict                fail the run when an onFail loop runs out of attempts
                          (default: false)
  --dry-run               write steps/*/prompt.md without calling any engine
                          (default: false)
  --capture <dir>         reuse an existing capture bundle instead of capturing
                          the site
  --prospect <id>         prospect from prospects.json: fills the url and
                          records the run on the prospect
  --compile-css           compile Tailwind into each variant's
                          assets/tailwind.css (replaces the CDN script; needs
                          @tailwindcss/cli or pnpm dlx) (default: false)
  --no-crawl              capture the start page only (no site crawl)
  --max-pages <n>         pages to capture including the home page (1–50)
  --max-depth <n>         link hops from the home page (1–5)
  --include <glob>        only crawl URL paths matching this glob, e.g. /blog/**
                          (repeatable) (default: [])
  --exclude <glob>        never crawl URL paths matching this glob (repeatable)
                          (default: [])
  -h, --help              display help for command

studio runs list

Usage: studio runs list [options]

runs in this workspace, newest first

Options:
  -h, --help  display help for command

studio runs show

Usage: studio runs show [options] <id>

print a run: steps, engine sessions and costs, variants

Arguments:
  id          run id (or path to a run dir)

Options:
  -h, --help  display help for command

studio runs open

Usage: studio runs open [options] <id>

serve the run's variants on 127.0.0.1 and print the URL of each variant and its
pages (Ctrl-C to stop)

Arguments:
  id                run id (or path to a run dir)

Options:
  --variant <slug>  only this variant
  --port <port>     port to listen on (default: a free port)
  --no-browser      do not open a browser window
  -h, --help        display help for command

studio runs resume

Usage: studio runs resume [options] <id>

continue a run from its first step that is not done

Arguments:
  id                  run id (or path to a run dir)

Options:
  --from <id>         rerun this step and every later step
  --step <id>         rerun only this step
  --set <path=value>  workflow override applied to this run (repeatable)
                      (default: [])
  --dry-run           write steps/*/prompt.md without calling any engine
                      (default: false)
  --strict            fail the run when an onFail loop runs out of attempts
                      (default: false)
  --require-all       exit 1 when the run is partial (default: false)
  -h, --help          display help for command

studio screenshot

Usage: studio screenshot [options] <runId>

capture desktop (and optionally mobile) screenshots of every variant of a run

Arguments:
  runId             run id under runs/, or a path to a run directory

Options:
  --width <px>      desktop viewport width (default 1280) (default: 1280)
  --mobile          also capture a 390x844 mobile screenshot (default: false)
  --slug <slug...>  only these variants (default: all)
  -h, --help        display help for command

Use the global --force to re-capture variants whose index.html is unchanged.

studio publish

Usage: studio publish [options] <runId>

upload a run’s variants to the preview service and save the receipt to
publish.json

Arguments:
  runId               run id under runs/

Options:
  --variants <slugs>  comma-separated variant slugs (default: every verified
                      variant)
  --site-id <id>      publish under this site id instead of <ws8>-<runId>
  --url <url>         preview service URL (default: preview.url in
                      .xyz/config.json)
  -h, --help          display help for command

Global --force: re-upload even when the service already holds this bundle, AND allow a
republish that drops previously published variants (the service deletes them with their
tracked links and stats). Unverified variants are published only when named in --variants.

studio stats

Usage: studio stats [options] <runIdOrSiteId>

opens, views and clicks for a published run or site

Arguments:
  runIdOrSiteId         a published run id, or a site id (<ws8>-<runId>)

Options:
  --since <when>        only count events since a duration ago (7d, 12h, 30m,
                        2w) or an ISO date
  --by <breakdown>      table to print: variant or prospect (default: "variant")
  --watch               refresh until interrupted with Ctrl-C (--json prints one
                        envelope per refresh) (default: false)
  --interval <seconds>  refresh interval for --watch (default 10) (default: 10)
  --url <url>           preview service URL (default: preview.url in
                        .xyz/config.json)
  -h, --help            display help for command

studio offer import

Usage: studio offer import [options] <file>

upsert prospects from a JSON or CSV file into prospects.json (by email)

Arguments:
  file               prospects file (.json array or .csv with a header row)

Options:
  --format <format>  json or csv (default: from the extension)
  --replace          replace stored fields of matching prospects and drop
                     prospects absent from the file (unsubscribed ones are kept)
  -h, --help         display help for command

studio offer prepare

Usage: studio offer prepare [options]

render one offer email per prospect into outbox/<campaign>/ (state prepared)

Options:
  --run <id>       offer this run to every selected prospect (default: each
                   prospect's own runId)
  --campaign <id>  campaign id (default: the run id)
  --prospect <id>  only this prospect (repeatable)
  --ai-copy        write the copy with the offer-copy workflow (default when
                   email.copy is "agent")
  --notes <text>   campaign notes passed to the offer-copy workflow
  --url <url>      preview service URL (default: preview.url in
                   .xyz/config.json)
  -h, --help       display help for command

Global --force re-renders items that already exist (never ones that are sending, sent or unknown).
The run must already be published (`studio publish <runId>`), with screenshots.

studio offer review

Usage: studio offer review [options]

list the outbox, approve or skip items, or open the local review page

Options:
  --campaign <id>  only this campaign
  --state <state>  only items in this state
  --open           serve the review page on 127.0.0.1:3344 until Ctrl-C
  --port <port>    review page port (default 3344; 0 picks a free one)
  --no-browser     with --open: do not open a browser window
  --approve-all    approve every prepared item
  --approve <id>   approve an item: prospect id or <campaign>/<prospectId>
                   (repeatable)
  --skip <id>      skip an item: prospect id or <campaign>/<prospectId>
                   (repeatable)
  -h, --help       display help for command

studio offer send

Usage: studio offer send [options]

send approved offer emails through the configured provider

Options:
  --campaign <id>       only this campaign
  --prospect <id>       only this prospect (repeatable)
  --dry-run             list what would be sent; send and write nothing
  --limit <n>           send at most n emails
  --retry-failed        also send items whose last attempt definitely failed
  --resend-unknown      also send items whose outcome is unknown (they may
                        already have been delivered)
  --include-unapproved  also send prepared items nobody approved (requires
                        --yes)
  --throttle <ms>       pause between sends (default email.throttleMs)
  -h, --help            display help for command

studio offer status

Usage: studio offer status [options]

the outbox by campaign; --with-stats joins opens/views/clicks from the preview
service

Options:
  --campaign <id>  only this campaign
  --with-stats     fetch stats from the preview service and join them per
                   prospect
  --url <url>      preview service URL (default: preview.url in
                   .xyz/config.json)
  -h, --help       display help for command

studio dashboard

Usage: studio dashboard [options]

serve the local dashboard on 127.0.0.1 (clients, workflows, runs); Ctrl-C to
stop

Options:
  --root <dir>   clients folder (remembered for next time; the page asks when
                 unset)
  --port <port>  port to listen on (default: a free port)
  --no-browser   do not open a browser window
  -h, --help     display help for command