Claude Skill

new-cask

This skill should be used when the user asks to "add a cask to homebrew", "create a homebrew cask", "add an app to homebrew", "new cask for", "homebrew cask for", "package an app for homebrew", "submit to homebrew-cask", "make a cask", "contribute a cask", or wants to package a m

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download malob-nix-config-configs_claude_plugins_homebrew_skills_new-cask-500b474.zip · 2 KB
Part of malob/nix-config — 13 skills

Install

skills CLI npx skills add https://github.com/malob/nix-config/tree/master/configs/claude/plugins/homebrew/skills/new-cask
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install malob-nix-config@llmmart
Git git clone https://github.com/malob/nix-config.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole malob/nix-config collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Creating a New Homebrew Cask

You are orchestrating the creation of a new Homebrew cask. This skill coordinates multiple specialist agents and scripts to complete the workflow.

IMPORTANT: This skill runs in the main conversation context. You will use the Task tool to spawn agents for specialized work.

Input

URL provided: $ARGUMENTS

If no URL was provided, ask the user for:

  1. The app name, OR
  2. A download URL (direct link to DMG/ZIP), OR
  3. The product homepage (you'll find the download link)

Workflow Overview

1. Pre-flight checks    → Agent: pre-flight-checker
2. Download & inspect   → Agent: app-inspector
3. Livecheck strategy   → Agent: livecheck-advisor
4. Write cask file      → Agent: cask-writer
5. Testing              → Automated tests, install, createzap, uninstall
6. Submit PR            → Agent: pr-submitter

Create a task list to track progress through these steps.

Step-by-Step Execution

Step 1: Pre-flight Checks

Before investing time, verify the app is suitable:

Use the Task tool:
- subagent_type: homebrew:pre-flight-checker
- prompt: Check if this app is suitable for homebrew-cask submission.
  <include whatever info you have: URL, app name, homepage>

The agent will derive any missing info (app name from URL, homepage via search, etc.) and include it in the output.

Capture from output: App name, homepage, download URL, description - you'll need these for later steps.

Decision point: If the agent returns REJECT, stop and explain why to the user. If CAUTION, inform the user and ask if they want to proceed.

Step 2: Download and Inspect

Download and inspect the app in one step:

Use the Task tool:
- subagent_type: homebrew:app-inspector
- prompt: Download and inspect the app.
  Download URL: <url>
  Homepage: <homepage>

The agent will download the file, compute the SHA256, extract all metadata, and run Homebrew's generate_cask_token tool to get the canonical token.

Capture from output: Suggested token, SHA256, version, bundle ID, app name, min macOS, auto-update info (framework, appcast URL if found), architecture.

Use the suggested token from app-inspector for subsequent steps. This token comes from Homebrew's tooling and handles naming conventions and collision detection.

Note on versioned URLs: If the download URL is unversioned (e.g., App.dmg), the livecheck-advisor may find a versioned URL in an appcast, release feed, or other source. If so, you'll need to re-download using the versioned URL to get the correct SHA256.

Step 3: Livecheck Strategy

Determine how to check for updates:

Use the Task tool:
- subagent_type: homebrew:livecheck-advisor
- prompt: Recommend a livecheck strategy for <app-name>.
  Download URL: <url>
  Homepage: <homepage>
  Update URL: <appcast-or-feed-url-if-found>
  Current version: <version>

Get the recommended livecheck block.

Step 4: Write the Cask

Synthesize everything into a cask file:

Use the Task tool:
- subagent_type: homebrew:cask-writer
- prompt: Write a cask for <app-name> with this metadata:
  Token: <token>
  Version: <version>
  URL: <download-url>
  SHA256: <checksum> (or :no_check if unversioned URL)
  (If separate binaries per architecture, provide URL and SHA256 for each)
  Name: <display-name>
  Description: <one-line-desc>
  Homepage: <homepage>
  Bundle ID: <bundle-id>
  App bundle: <app-name>.app
  Min macOS: <min-version>
  Auto-updates: <yes/no>
  Livecheck: <livecheck-block>
  Architecture: <arm64/intel/universal, only if not universal>

Note: The zap stanza is added later after running createzap during testing.

Step 5: Testing

Automated Tests

Run the validation script:

${CLAUDE_PLUGIN_ROOT}/scripts/test-cask.sh "<token>"

If tests fail, review the output, fix the cask (often brew style --fix handles style issues), and re-run.

For unversioned URLs: Use --skip-livecheck flag.

Install and Validate

  1. Install:

    HOMEBREW_NO_INSTALL_FROM_API=1 brew install --cask <token>
    
  2. Launch:

    open -a "<App Name>"
    
  3. User verification: Ask the user to sign in or set up the app if needed, then confirm when done.

Zap Discovery

  1. Run createzap (try both app name and bundle ID):

    brew tap nrlquaker/createzap 2>/dev/null || true
    brew createzap "<App Name>"
    brew createzap "<bundle-id>"
    
  2. Update the cask - Add the discovered zap paths using the Edit tool. For simple additions you can edit directly; for significant changes, re-invoke the cask-writer agent.

  3. Uninstall:

    brew uninstall --cask <token>
    
  4. Re-run automated tests if zap stanza was added.

Step 6: Submit PR

When ready to submit:

Use the Task tool:
- subagent_type: homebrew:pr-submitter
- prompt: Submit a PR for the <token> cask.
  Version: <version>
  Cask path: <path-to-cask-file>
  All tests passed: yes

Error Recovery

If any step fails:

  • The task list shows which steps completed
  • You can resume from the failed step
  • Agent outputs are preserved in conversation history

Reference Documentation

For detailed guidance, agents can read these docs (at /opt/homebrew/docs/):

  • Acceptable-Casks.md - What's allowed
  • Cask-Cookbook.md - Stanza reference
  • Brew-Livecheck.md - Livecheck strategies
  • Adding-Software-to-Homebrew.md - Contribution process

Scripts Location

Scripts are at ${CLAUDE_PLUGIN_ROOT}/scripts/:

  • download-checksum.sh <url> [filename] - Download and SHA256
  • test-cask.sh <token> [--skip-livecheck] - Run audit/style/livecheck
Files (nix-config)
  • SKILL.md 6.3 KB
    ---
    name: new-cask
    argument-hint: "<url>"
    description: >-
      This skill should be used when the user asks to "add a cask to homebrew",
      "create a homebrew cask", "add an app to homebrew", "new cask for",
      "homebrew cask for", "package an app for homebrew", "submit to homebrew-cask",
      "make a cask", "contribute a cask", or wants to package a macOS application
      for Homebrew.
    allowed-tools: >-
      Read,
      Grep,
      Glob,
      WebFetch,
      WebSearch,
      Bash(brew *),
      Bash(gh *),
      Bash(curl *),
      Bash(hdiutil *),
      Bash(defaults read *),
      Bash(shasum *),
      Bash(git *),
      Bash(plutil *),
      Bash(file *),
      Bash(lipo *),
      Bash(ls *),
      Bash(find *),
      Bash(strings *),
      Bash(unzip *),
      Bash(open *),
      Bash(${CLAUDE_PLUGIN_ROOT}/scripts/*)
    ---
    
    # Creating a New Homebrew Cask
    
    You are orchestrating the creation of a new Homebrew cask. This skill coordinates multiple specialist agents and scripts to complete the workflow.
    
    **IMPORTANT:** This skill runs in the main conversation context. You will use the Task tool to spawn agents for specialized work.
    
    ## Input
    
    **URL provided:** $ARGUMENTS
    
    If no URL was provided, ask the user for:
    1. The app name, OR
    2. A download URL (direct link to DMG/ZIP), OR
    3. The product homepage (you'll find the download link)
    
    ## Workflow Overview
    
    ```
    1. Pre-flight checks    → Agent: pre-flight-checker
    2. Download & inspect   → Agent: app-inspector
    3. Livecheck strategy   → Agent: livecheck-advisor
    4. Write cask file      → Agent: cask-writer
    5. Testing              → Automated tests, install, createzap, uninstall
    6. Submit PR            → Agent: pr-submitter
    ```
    
    **Create a task list** to track progress through these steps.
    
    ## Step-by-Step Execution
    
    ### Step 1: Pre-flight Checks
    
    Before investing time, verify the app is suitable:
    
    ```
    Use the Task tool:
    - subagent_type: homebrew:pre-flight-checker
    - prompt: Check if this app is suitable for homebrew-cask submission.
      <include whatever info you have: URL, app name, homepage>
    ```
    
    The agent will derive any missing info (app name from URL, homepage via search, etc.) and include it in the output.
    
    **Capture from output:** App name, homepage, download URL, description - you'll need these for later steps.
    
    **Decision point:** If the agent returns REJECT, stop and explain why to the user. If CAUTION, inform the user and ask if they want to proceed.
    
    ### Step 2: Download and Inspect
    
    Download and inspect the app in one step:
    
    ```
    Use the Task tool:
    - subagent_type: homebrew:app-inspector
    - prompt: Download and inspect the app.
      Download URL: <url>
      Homepage: <homepage>
    ```
    
    The agent will download the file, compute the SHA256, extract all metadata, and run Homebrew's `generate_cask_token` tool to get the canonical token.
    
    **Capture from output:** Suggested token, SHA256, version, bundle ID, app name, min macOS, auto-update info (framework, appcast URL if found), architecture.
    
    **Use the suggested token** from app-inspector for subsequent steps. This token comes from Homebrew's tooling and handles naming conventions and collision detection.
    
    **Note on versioned URLs:** If the download URL is unversioned (e.g., `App.dmg`), the livecheck-advisor may find a versioned URL in an appcast, release feed, or other source. If so, you'll need to re-download using the versioned URL to get the correct SHA256.
    
    ### Step 3: Livecheck Strategy
    
    Determine how to check for updates:
    
    ```
    Use the Task tool:
    - subagent_type: homebrew:livecheck-advisor
    - prompt: Recommend a livecheck strategy for <app-name>.
      Download URL: <url>
      Homepage: <homepage>
      Update URL: <appcast-or-feed-url-if-found>
      Current version: <version>
    ```
    
    Get the recommended livecheck block.
    
    ### Step 4: Write the Cask
    
    Synthesize everything into a cask file:
    
    ```
    Use the Task tool:
    - subagent_type: homebrew:cask-writer
    - prompt: Write a cask for <app-name> with this metadata:
      Token: <token>
      Version: <version>
      URL: <download-url>
      SHA256: <checksum> (or :no_check if unversioned URL)
      (If separate binaries per architecture, provide URL and SHA256 for each)
      Name: <display-name>
      Description: <one-line-desc>
      Homepage: <homepage>
      Bundle ID: <bundle-id>
      App bundle: <app-name>.app
      Min macOS: <min-version>
      Auto-updates: <yes/no>
      Livecheck: <livecheck-block>
      Architecture: <arm64/intel/universal, only if not universal>
    ```
    
    **Note:** The zap stanza is added later after running createzap during testing.
    
    ### Step 5: Testing
    
    #### Automated Tests
    
    Run the validation script:
    
    ```bash
    ${CLAUDE_PLUGIN_ROOT}/scripts/test-cask.sh "<token>"
    ```
    
    If tests fail, review the output, fix the cask (often `brew style --fix` handles style issues), and re-run.
    
    **For unversioned URLs:** Use `--skip-livecheck` flag.
    
    #### Install and Validate
    
    1. **Install:**
       ```bash
       HOMEBREW_NO_INSTALL_FROM_API=1 brew install --cask <token>
       ```
    
    2. **Launch:**
       ```bash
       open -a "<App Name>"
       ```
    
    3. **User verification:** Ask the user to sign in or set up the app if needed, then confirm when done.
    
    #### Zap Discovery
    
    4. **Run createzap** (try both app name and bundle ID):
       ```bash
       brew tap nrlquaker/createzap 2>/dev/null || true
       brew createzap "<App Name>"
       brew createzap "<bundle-id>"
       ```
    
    5. **Update the cask** - Add the discovered zap paths using the Edit tool. For simple additions you can edit directly; for significant changes, re-invoke the cask-writer agent.
    
    6. **Uninstall:**
       ```bash
       brew uninstall --cask <token>
       ```
    
    7. **Re-run automated tests** if zap stanza was added.
    
    ### Step 6: Submit PR
    
    When ready to submit:
    
    ```
    Use the Task tool:
    - subagent_type: homebrew:pr-submitter
    - prompt: Submit a PR for the <token> cask.
      Version: <version>
      Cask path: <path-to-cask-file>
      All tests passed: yes
    ```
    
    ## Error Recovery
    
    If any step fails:
    - The task list shows which steps completed
    - You can resume from the failed step
    - Agent outputs are preserved in conversation history
    
    ## Reference Documentation
    
    For detailed guidance, agents can read these docs (at `/opt/homebrew/docs/`):
    - `Acceptable-Casks.md` - What's allowed
    - `Cask-Cookbook.md` - Stanza reference
    - `Brew-Livecheck.md` - Livecheck strategies
    - `Adding-Software-to-Homebrew.md` - Contribution process
    
    ## Scripts Location
    
    Scripts are at `${CLAUDE_PLUGIN_ROOT}/scripts/`:
    - `download-checksum.sh <url> [filename]` - Download and SHA256
    - `test-cask.sh <token> [--skip-livecheck]` - Run audit/style/livecheck
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related