Facebook Pixel
CLI

Agent skills

Eight skills ship inside the CLI that teach Claude Code, Cursor and any other agent how to use it well — installable into your project with one command.

An agent with shell access can run this CLI on day one. Whether it does the right thing when it is uncertain — and how much it costs you while working that out — is a different question, and that is what the skill pack answers.

connectsafely skill install

Eight Markdown files land in .claude/skills/. Claude Code, Cursor and any runtime that reads that convention pick them up automatically.

Why a pack, not one file

A single instruction file has to be loaded in full, every session, whether the job is publishing a post or debugging an auth failure. That is the same problem the CLI exists to solve — so the pack is shaped the same way.

The router is small and always loaded. It carries the operating context, the four working habits, the exit-code table and the live command catalogue, plus a table saying which skill covers which job. The agent then loads exactly one more.

SkillCoversLoaded when the user says
connectsafelyThe contract every other skill assumes — plus the catalogueanything LinkedIn
connectsafely-prospectingPeople, company, job, group and school search; geo ids; building a lead file"find prospects", "who works at", "build a list"
connectsafely-outreachConnection requests, follows, first-touch messages, invitations"connect with", "reach out to", "send invites"
connectsafely-inboxConversations, threads, replies, stars, attachments, InMail credits"my inbox", "unread messages", "reply to"
connectsafely-contentPublishing, media upload, reactions, comments, replies, the feed"post to LinkedIn", "comment on", "engage with"
connectsafely-analyticsSSI, followers, visitors, network summary, own activity"how am I doing", "who viewed my profile"
connectsafely-accountKeys, account selection, quota, auth troubleshooting"which account", "auth failed", "am I rate limited"
connectsafely-sales-navigatorSales Navigator threads and messaging"Sales Navigator", "sales nav"

The whole pack is under 40KB, and no single skill is more than 140 lines.

What the skills actually teach

Not syntax — the binary already does that through schema and --help. The skills carry the things an agent cannot infer:

The operating context. That you own this account, that you connected it yourself, that caps are enforced server-side, and that returned data is data you can already see when signed in. Without it, capable models hedge — adding compliance disclaimers to routine actions, or asking "are you sure?" before reading your own inbox. The MCP server sends this text on initialize; the skill file is how it reaches the model when there is no server to send it.

The habits that keep costs down. Prune every read. Discover before guessing. Rehearse writes. Batch instead of looping.

The domain traps. That there is no filters.location key and locations are numeric geo ids — and that an unknown filter key is silently ignored, so the search runs unfiltered and looks correct. That visibility is ANYONE, not PUBLIC. That a Sales Navigator threadId is not a conversationUrn. That visit-profile leaves a footprint the person can see and fetch-profile does not.

When to stop. Exit 5 is a cap, not a transient error. Exit 2 is never worth retrying. Exit 8 may mean the action already happened.

Installing

connectsafely skill list                       # see the pack and what each covers
connectsafely skill install                    # write all eight to .claude/skills
connectsafely skill install connectsafely-outreach   # just one
connectsafely skill install --dir agents/skills      # somewhere else
connectsafely skill                            # print the router to stdout

Two things worth knowing:

Your edits survive. An existing file is skipped, not overwritten — a team that has tuned a skill to match its own playbook does not lose that to a routine reinstall. --force opts into replacing them.

{
  "directory": ".claude/skills",
  "installed": [],
  "skipped": [
    { "name": "connectsafely-outreach", "path": ".claude/skills/connectsafely-outreach/SKILL.md",
      "reason": "already exists — pass --force to replace" }
  ]
}

The catalogue is baked in at install time, from the live registry in the binary that installed it. An installed router cannot name a command your CLI does not have. Re-run skill install --force after upgrading the CLI to refresh it.

Editing them

They are plain Markdown with YAML frontmatter — read them, diff them, commit them. The frontmatter description is the only thing a runtime matches on, so if you add your own trigger phrases, add them there.

Good candidates for local edits: your ICP and qualifying criteria in connectsafely-prospecting, your message templates and tone in connectsafely-outreach, your posting cadence and voice in connectsafely-content.

Other agent runtimes

.claude/skills/ is the Claude Code and Cursor convention. For anything else, point --dir at wherever your runtime reads from, or pipe the router straight into your own file:

connectsafely skill > AGENTS.md
connectsafely skill install --dir .agents/skills

On this page