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

@so-me/cli

v2.1.2

Published

CLI tool for so-me.studio social media scheduler. Ships an OpenClaw skill (SKILL.md + tools.md + examples) so AI agents can drive the platform.

Readme

@so-me/cli

Command-line tool for the so-me social media scheduler. Manage posts, accounts, media, analytics, inbox, AI content, approvals, teams, biolinks, drafts, and settings from your terminal.

Installation

npm install -g @so-me/cli

Authentication

API Key (recommended for scripts)

so-me auth:login --api-key sk_live_your_key_here
# Or use environment variable
export SOME_API_KEY=sk_live_your_key_here

Browser Login (interactive)

so-me auth:login
# Opens browser for authorization, no API key needed

Check Status

so-me auth:status                             # Local auth state
so-me auth:whoami                             # Verify key against server + print user/org
so-me auth:logout

Commands

Sections below follow the same order as the Mintlify CLI docs.

Publishing

Posts

so-me posts:list                              # List all posts
so-me posts:list --table                      # Table format
so-me posts:list --status draft --platform TWITTER
so-me posts:list --start-date 2026-04-01 --end-date 2026-04-30
so-me posts:list --page 2 --limit 10
so-me posts:get <id>                          # Get a single post
so-me posts:calendar --start 2026-04-01T00:00:00Z --end 2026-04-30T23:59:59Z
so-me posts:create -c "Hello!" --platform TWITTER
so-me posts:create -c "Scheduled" -s 2026-04-10T14:00:00Z --platform LINKEDIN
so-me posts:create -c "With media" -m file-id-1,file-id-2 --post-type IMAGE
so-me posts:create -c "Multi account" -a acc-1,acc-2
so-me posts:create --settings '{"threadMode":true}' -c "Thread" --platform TWITTER
so-me posts:create -j ./campaign.json         # From JSON file
so-me posts:update <id> -c "Updated text"
so-me posts:update <id> -s 2026-05-01T10:00:00Z
so-me posts:schedule <id> -s 2026-04-10T14:00:00Z
so-me posts:unschedule <id>
so-me posts:retry <id>                        # Retry a failed post
so-me posts:resubmit <id>                     # Resubmit rejected post for approval
so-me posts:delete <id> --yes
so-me posts:delete id1 id2 id3 --yes          # Bulk delete via delete
so-me posts:bulk-delete id1 id2 id3 --yes     # Bulk delete (explicit command)

Drafts

so-me drafts:list                             # List draft posts
so-me drafts:list --page 2 --limit 10
so-me drafts:get <id>                         # Get a single draft
so-me drafts:create -c "Draft content" --title "My Draft"
so-me drafts:create -c "With media" -m url1 url2 --post-type IMAGE
so-me drafts:create --metadata '{"key":"value"}'
so-me drafts:update <id> -c "Updated" --title "New Title"
so-me drafts:convert <id> --platform TWITTER  # Convert draft to post
so-me drafts:convert <id> --platform LINKEDIN -s 2026-04-10T14:00:00Z
so-me drafts:delete <id> --yes
so-me drafts:delete id1 id2 --yes             # Bulk delete

Comments

so-me comments:list <post-id>
so-me comments:list <post-id> --page 2 --limit 50
so-me comments:add <post-id> --content "Looks great!"
so-me comments:update <comment-id> --content "Edited text"
so-me comments:mark-read <post-id>            # Mark all comments on a post as read
so-me comments:delete <comment-id>

Media

so-me media:upload ./photo.jpg                # Upload file
so-me media:upload                            # Interactive (drag & drop)
so-me media:upload ./photo.jpg --folder "Campaign Assets"
so-me media:list                              # List files and folders
so-me media:list --folder <folder-id>         # Files in folder
so-me media:list --file <file-id>             # File details
so-me media:get <id>                          # Get file metadata by ID
so-me media:search <query>                    # Search files by name/originalName
so-me media:folders                           # List folders
so-me media:create-folder --name "Campaign Assets"
so-me media:move <id> --to <folder-id>        # Move file to folder
so-me media:move <id> --to root               # Move file to root
so-me media:move-folder <id> --to <parent-id> # Move folder under another folder
so-me media:rename <id> --name "new-name"     # Rename file
so-me media:rename <id> --name "new" --type folder  # Rename folder (shortcut)
so-me media:rename-folder <id> --name "new"   # Rename folder (explicit command)
so-me media:delete <id> --yes                 # Delete file
so-me media:delete <id> --type folder --yes   # Delete folder (any depth)
so-me media:delete id1 id2 --yes              # Bulk delete files
so-me media:bulk-delete id1 id2 id3 --yes     # Bulk delete (explicit command)

Content Templates

Render preset graphics (memes, quote cards, testimonials, etc.) into your media library, ready to attach to posts. Categories: meme, quote_card, before_after, reaction, announcement, testimonial.

so-me templates:list                          # List content templates (meme, quote card, etc.)
so-me templates:list --category quote_card --limit 50
so-me templates:list --category testimonial
so-me templates:get <id>                      # Template details (incl. field schema)
so-me templates:render <id> --data '{"quote":"Ship it","author":"CLI"}'
so-me templates:render <id> --file ./vars.json

AI Studio

AI

so-me ai:generate --prompt "Write a tweet about product launch"
so-me ai:generate --prompt "LinkedIn post" --platform LINKEDIN --tone professional
so-me ai:generate --prompt "Short caption" --length short
so-me ai:generate-and-schedule --prompt "Monday motivation" --platform TWITTER --date 2026-05-01T09:00:00Z
so-me ai:image --prompt "A sunset over mountains"
so-me ai:image --prompt "Logo design" --style minimalist --aspect-ratio 1:1
so-me ai:image:list                           # List generated images
so-me ai:image:get <id>                       # Image metadata
so-me ai:image:delete <id>                    # Delete a generated image

# AI video (UGC)
so-me ai:video:generate --prompt "30-sec ad about our dashboard"
so-me ai:video:list                           # List generated videos
so-me ai:video:get <id>                       # Video metadata
so-me ai:video:delete <id>                    # Delete a generated video
so-me ai:video:avatars                        # List available avatars
so-me ai:video:sounds                         # List available background sounds
so-me ai:video:sounds --genre chill           # Filter sounds by genre
so-me ai:video:hooks --topic "new feature launch"   # Hook-line suggestions

so-me ai:history                              # View generation history

Inbox & Engagement

WhatsApp

Manage Meta-approved WhatsApp Business templates and send template messages. The <account-id> accepts either the internal UUID (from accounts:list) or the Meta WABA provider ID.

so-me whatsapp:templates <account-id>                      # List templates
so-me whatsapp:create-template --account <id> --file ./tmpl.json
so-me whatsapp:delete-template <account-id> <template-name> -y
so-me whatsapp:send <account-id> --to +15551234567 --template welcome_v1 --language en_US
so-me whatsapp:send <account-id> --to +15551234567 --template order_shipped --language en_US \
  --components '[{"type":"body","parameters":[{"type":"text","text":"Alice"}]}]'
so-me whatsapp:upload-media --account <id> --type image --url https://cdn.example.com/hero.jpg

Inbox

so-me inbox:list                              # List conversations
so-me inbox:list --status unresolved          # Filter by status
so-me inbox:list --platform twitter           # Filter by platform
so-me inbox:list --type comment               # Filter by type (message, comment, mention)
so-me inbox:list --unread                     # Only unread
so-me inbox:list --search "keyword"           # Search conversations
so-me inbox:list --page 2 --limit 50          # Paginate
so-me inbox:messages <thread-id>              # Thread messages
so-me inbox:read <thread-id>                  # Mark as read
so-me inbox:resolve <thread-id> --status resolved
so-me inbox:resolve <thread-id> --status archived
so-me inbox:reply <thread-id> --message "Thanks!"
so-me inbox:reply <thread-id> --image url1 url2  # Reply with images
so-me inbox:reply <thread-id> --video <url>   # Reply with video
so-me inbox:reply <thread-id> --audio <url>   # Reply with audio
so-me inbox:reply <thread-id> --file <url>    # Reply with document
so-me inbox:subscribe <account-id-or-platform>    # Enable inbox
so-me inbox:unsubscribe <account-id-or-platform>  # Disable inbox
so-me inbox:enable <account-id-or-platform>       # Alias for inbox:subscribe
so-me inbox:disable <account-id-or-platform>      # Alias for inbox:unsubscribe
so-me inbox:saved-replies                     # List saved replies
so-me inbox:saved-replies <id>                # Get reply details
so-me inbox:create-reply --text "Hello!"      # Create saved reply
so-me inbox:create-reply --text "Hi" --file f1 f2  # With attachments (max 4)
so-me inbox:edit-reply <id> --text "Updated"
so-me inbox:delete <thread-id> --yes          # Delete conversation
so-me inbox:delete id1 id2 --yes              # Bulk delete conversations
so-me inbox:delete-reply <id> --yes           # Delete saved reply
so-me inbox:delete-reply id1 id2 --yes        # Bulk delete saved replies

Analytics

so-me analytics:platform <account-id-or-platform>           # Platform metrics (7 days)
so-me analytics:platform <account-id-or-platform> --days 30
so-me analytics:platform facebook page         # Facebook page analytics
so-me analytics:platform facebook posts        # Facebook post analytics
so-me analytics:platform instagram account     # Instagram account analytics
so-me analytics:platform instagram stories     # Instagram stories
so-me analytics:platform linkedin page         # LinkedIn page analytics
so-me analytics:platform youtube channel       # YouTube channel analytics
so-me analytics:platform x account             # X/Twitter account analytics
so-me analytics:post <post-id> --days 30       # Engagement metrics for a single post

Platform sections:

  • Facebook: page, posts, videos
  • Instagram: account, media, stories
  • LinkedIn: page, posts
  • YouTube: channel, videos
  • X/Twitter: account, content
  • WhatsApp: account

Biolink

Biolinks

so-me biolink:list                            # List all biolinks
so-me biolink:get <id>                        # Biolink details
so-me biolink:public <slug>                   # Inspect the public biolink payload
so-me biolink:create --slug my-link --name "My Page" --bio "Welcome!"
so-me biolink:update <id> --name "Updated" --bio "New bio"
so-me biolink:update <id> --slug new-slug --button-style pill
so-me biolink:update <id> --show-grid         # Show Instagram grid
so-me biolink:publish <id>                    # Toggle publish/unpublish
so-me biolink:analytics <id>                  # Views, clicks, CTR
so-me biolink:delete <id> --yes

# Themes
so-me biolink:theme <id> --preset dark
so-me biolink:theme <id> --preset neon
so-me biolink:theme <id> --bg "#1a1a2e" --text "#fff" --button "#e94560"

# Buttons
so-me biolink:buttons <biolink-id>            # List buttons
so-me biolink:add-button <biolink-id> --type link --text "Website" --url https://example.com
so-me biolink:add-button <biolink-id> --type email --text "Contact" --email [email protected]
so-me biolink:add-button <biolink-id> --type phone --text "Call" --phone "+1234567890"
so-me biolink:update-button <biolink-id> <button-id> --text "Updated" --active
so-me biolink:reorder-buttons <biolink-id> btn1 btn2 btn3
so-me biolink:delete-button <biolink-id> <button-id> --yes

# Gallery Posts
so-me biolink:posts <biolink-id>              # List gallery posts
so-me biolink:add-post <biolink-id> --image <url> --caption "Check this out" --link <url>
so-me biolink:update-post <biolink-id> <post-id> --caption "Updated" --visible
so-me biolink:reorder-posts <biolink-id> p1 p2 p3
so-me biolink:delete-post <biolink-id> <post-id> --yes

Theme presets: default, dark, gradient, minimal, neon, sunset, ocean, forest

Button types: link, social, email, phone, file, text

Team & Collaboration

Teams

so-me teams:list                              # List members
so-me teams:invite --email [email protected]
so-me teams:invite --email [email protected] --post-approval auto_approve
so-me teams:invitations                       # Pending invitations
so-me teams:update <id-or-email> --post-approval requires_approval
so-me teams:cancel-invite <id-or-email>       # Cancel invitation
so-me teams:remove <id-or-email>              # Remove member

Approvals

so-me approvals:list                          # List posts pending approval
so-me approvals:approve <post-id>
so-me approvals:approve <post-id> --comment "Looks good"
so-me approvals:reject <post-id> --comment "Needs revision"

Accounts

so-me accounts:list                           # List connected accounts
so-me accounts:get <id-or-platform>           # Account details by ID or platform name
so-me accounts:get-details <uuid>             # Account details by exact UUID
so-me accounts:connect --platform twitter     # Connect via browser OAuth
so-me accounts:remove twitter                 # Remove a connected account by platform
so-me accounts:remove-by-id <uuid> --yes      # Remove by exact UUID

Supported platforms: twitter (alias x), linkedin, linkedin_page, instagram, facebook, tiktok, youtube, threads, pinterest, whatsapp, dribbble

Settings & Billing

Profile

so-me settings:profile                        # Get your profile
so-me settings:update-profile --name "New Name"
so-me settings:update-profile --password "newpass123"

Organization

so-me settings:org                            # Current org details
so-me settings:update-org --name "My Studio" --color "#ff5733"
so-me settings:tenants                        # List all orgs you belong to
so-me settings:create-org --name "New Org" --description "Description"
so-me settings:leave-org <id> --yes
so-me settings:delete-org <id> --yes

API Keys

so-me settings:api-keys                       # List API keys
so-me settings:create-api-key --name "CI/CD"
so-me settings:revoke-api-key <id> --yes

Billing

# Current subscription + usage
so-me settings:billing                        # Subscription status
so-me settings:usage                          # Usage for current period
so-me settings:referral-code                  # Your referral code + totals

# Plan catalog
so-me billing:plans                           # List all subscription plans
so-me billing:plan-features <name>            # Feature matrix for a plan
so-me billing:plan-features scale             # e.g. plan name = scale
so-me billing:addons                          # List add-on SKUs

Webhooks

so-me webhooks:list                           # List subscriptions
so-me webhooks:get <id>                       # Subscription details
so-me webhooks:create --url https://example.com/hook --categories post
so-me webhooks:create --url https://... --categories post,inbox --description "prod"
so-me webhooks:create --url https://... --categories post --events post.published,post.failed
so-me webhooks:create --url https://... --categories post --payload-template '{"e":"{{event}}"}'
so-me webhooks:update <id> --url https://new.example.com/hook
so-me webhooks:update <id> --inactive          # Pause deliveries
so-me webhooks:update <id> --active            # Resume deliveries
so-me webhooks:update <id> --regenerate-secret # Rotate signing secret
so-me webhooks:test <id>                       # Send a synthetic test delivery
so-me webhooks:deliveries                      # Recent delivery logs
so-me webhooks:deliveries --page 2 --limit 50
so-me webhooks:retry <delivery-id>             # Re-queue a failed delivery
so-me webhooks:events                          # Available event catalog
so-me webhooks:delete <id>                     # Permanently remove

Support

so-me support:list-tickets                    # List your tickets
so-me support:create-ticket --subject "Can't schedule" --message "Details..."
so-me support:create-ticket --subject "X" --message "Y" --priority HIGH
so-me support:get-ticket <id>                 # Ticket details
so-me support:send-message <id> --message "Follow-up note"
so-me support:list-messages <id>              # All messages on a ticket

Global Options

| Flag | Description | |------|-------------| | --api-key <key> | Override stored API key | | --api-url <url> | Override API base URL | | --json | JSON output (default) | | --table | Table-formatted output | | --verbose | Show detailed errors | | --yes / -y | Skip confirmation prompts |

Environment Variables

| Variable | Description | |----------|-------------| | SOME_API_KEY | API key (alternative to --api-key) | | SOME_API_URL | API base URL (default: https://api.so-me.studio) |

Scripting

All commands output JSON by default, making them scriptable with jq:

# Get the first post's ID
so-me posts:list | jq '.data[0].id'

# List account names
so-me accounts:list | jq '.[].accountName'

# Create post and capture ID
POST_ID=$(so-me posts:create -c "Hello" --platform TWITTER | jq -r '.id')
so-me posts:schedule $POST_ID -s 2026-04-10T14:00:00Z

Self-Hosted

Point the CLI at your own instance:

export SOME_API_URL=https://api.your-domain.com
so-me auth:login --api-key sk_live_xxx