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

ppcos

v1.0.1

Published

CLI tool to manage Google Ads AI workflow skills and agents for Claude Code

Readme

ppcos-cli

CLI tool to distribute and manage Claude Code skills and agents for Google Ads workflows.

Installation

npm install -g ppcos

Requires Node.js 18+.

Quick Start

# Create a hub folder and navigate to it
mkdir ppcos-hub && cd ppcos-hub

# Create main-config.json template
ppcos init

# Edit main-config.json with your client names, then:
ppcos init-all

# Check status of all clients
ppcos status

# Update all clients when new version is released
ppcos update

Commands

ppcos init [client-name]

Without args: create main-config.json template. With client name: create a client workspace.

ppcos init                            # Create main-config.json template
ppcos init client-acme                # Create client workspace
ppcos init client-acme --skip-config  # Don't add to main-config.json

Creates:

clients/client-acme/
├── .managed.json          # Tracks managed files
├── .claude/
│   ├── skills/            # 6 Google Ads skills
│   ├── agents/            # 4 specialized agents
│   └── settings.local.json
├── CLAUDE.md              # Client context template
├── config/                # API credentials
├── context/               # Client data
└── created/               # Generated assets

ppcos init-all

Initialize all clients defined in main-config.json.

ppcos init-all
ppcos init-all --force  # Reinitialize existing clients (backs up first)

main-config.json example:

{
  "version": "1.0",
  "clients": [
    { "name": "client-acme", "enabled": true },
    { "name": "client-beta", "enabled": true },
    { "name": "client-gamma", "enabled": false }
  ]
}

ppcos update

Update base skills in all clients while preserving custom work.

ppcos update                    # Update all clients
ppcos update --client acme      # Update specific client
ppcos update --dry-run          # Show what would change

Conflict handling:

  • Unchanged files: automatically updated
  • Modified files: prompts with options (backup/skip/cancel)
  • Custom files: never touched
Updating client-acme (v1.0.0 → v1.1.0)

⚠ Modified files detected:
  - .claude/skills/rsa-maker/SKILL.md

Options:
  [1] Backup and overwrite (files saved to .backup/)
  [2] Skip modified files (keep your changes)
  [3] Cancel update

Choice [1/2/3]:

ppcos status

Show version and modification status for all clients.

ppcos status
ppcos status --client acme  # Show specific client only

Output:

ppcos-hub/

  client-acme
    Version: 1.0.0 → 1.1.0 available
    Managed: 42 files
    Modified: 2 files
      - .claude/skills/rsa-maker/SKILL.md
    Custom: 1 skill
    Conflicts: 0

  client-beta
    Version: 1.1.0 (up to date)
    Managed: 42 files
    Modified: 0 files
    Custom: 0 skills
    Conflicts: 0

Package version: 1.1.0

Included Skills

| Skill | Description | |-------|-------------| | gads-context | Pull Google Ads account data (campaigns, ads, keywords) | | competitor-scraper | Fetch competitor ads via DataForSEO API | | ads-context-gatherer | Gather brand context from websites | | offer-angles | Extract offer message angles for RSA composition | | rsa-maker | Create Responsive Search Ads from offer angles | | search-term-analyzer | Analyze search terms for keyword opportunities | | account-changelog | Fetch account change history from Google Ads | | landing-page-builder | Generate high-converting landing page wireframes | | ecom-page-builder | Generate ecommerce page wireframes with product-first layouts |

Included Agents

| Agent | Description | |-------|-------------| | qs-decider | Quality Score improvement coordinator | | ad-relevance-analyzer | Analyze ad relevance issues | | expected-ctr-analyzer | Analyze expected CTR issues | | landing-page-analyzer | Analyze landing page experience |

How It Works

Managed vs Custom Files

  • Managed files: Created by init, tracked in .managed.json, updated by CLI
  • Custom files: Created by you, never touched by updates

Add your own skills to .claude/skills/ - they'll never be modified.

Update Safety

  1. Calculates SHA256 checksum of each managed file
  2. Compares with stored checksum in .managed.json
  3. Unchanged files: updated silently
  4. Modified files: user prompted (backup/skip/cancel)
  5. Custom files: completely ignored

Typical Workflow

# Setup (once)
mkdir ppcos-hub && cd ppcos-hub
ppcos init client-acme
cd clients/client-acme

# Daily work
# Edit CLAUDE.md with client context
# Run /ppcos to gather brand info
# Create ads with /rsa-maker

# When CLI updates
cd ../..
ppcos update

Configuration

config/.env.example

Template for API credentials. Copy to .env and fill in:

GOOGLE_ADS_DEVELOPER_TOKEN=your_token
GOOGLE_ADS_CLIENT_ID=your_client_id
GOOGLE_ADS_CLIENT_SECRET=your_client_secret
GOOGLE_ADS_REFRESH_TOKEN=your_refresh_token
DATAFORSEO_USERNAME=your_username
DATAFORSEO_PASSWORD=your_password

config/ads-context.config.json

Per-client settings:

{
  "customerId": "1234567890",
  "competitors": ["competitor1.com", "competitor2.com"],
  "targetLocations": ["United States"]
}

Adding Skills to the Base

To add a new skill that gets distributed to all clients:

  1. Create the skill folder in .claude-base/.claude/skills/<skill-name>/ with at minimum a SKILL.md
  2. Bump the package version:
    npm version patch  # 1.0.0 → 1.0.1
  3. Push to GitHub

Existing clients will receive the new skill on their next ppcos update. New clients get it automatically via ppcos init.

The same applies to agents (.claude-base/.claude/agents/) and any other base template files.

Why the version bump matters: The update command compares package.json version against each client's stored version. Without a bump, ppcos update sees clients as up-to-date and skips them.

License

Licensed for personal and internal business use only under the PPC Mastery General Terms & Conditions.

© 2026 PPC Mastery B.V. All rights reserved.