Agent skill

Curviate Engage

by davila7 in davila7/claude-code-templates

Create and engage with LinkedIn content using the Curviate CLI.

MITAuto-check passedBusiness, Finance & HR

Install Curviate Engage

skills CLI
$ npx skills add davila7/claude-code-templates --skill curviate-engage -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install davila7/claude-code-templates curviate-engage --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/davila7/claude-code-templates.git skills-src && mkdir -p .claude/skills && cp -r skills-src/cli-tool/components/skills/curviate/curviate-engage .claude/skills/curviate-engage && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
curviate-engage
GitHub stars
33k
Token cost
~3.8k tokens
SKILL.md length
1,808 words
Files
1
Skills in repo
479
Repo updated
First seen
Licence
MIT

At a glance

Create and engage with LinkedIn content using the Curviate CLI.

  • Reading the home feed
  • SKILL.md covers Before any command, Identifiers, post and comment, plus 3 more sections
  • Calls npm; needs CURVIATE_API_KEY
  • Working through notifications

What it does

Curviate Engage is an agent skill from davila7/claude-code-templates. Create and engage with LinkedIn content using the Curviate CLI. Covers post (get, create, react, unreact, reactions, delete, save, saved, unsave, user-posts, user-reactions), comment (list, add, reply, edit, delete, replies, react, unreact, reactions, user), feed home and notification. Carries the write-versus-read reaction vocabularies, post-identifier forms, and the pagination trap on reaction lists. Use when posting, commenting, reacting, reading the home feed, or working through notifications.

Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Business, Finance & HR. It works with React and LinkedIn. The repository describes itself as: CLI tool for configuring and monitoring Claude Code. The licence is MIT.

When your agent uses it

  • Reading the home feed
  • Working through notifications

Example prompts

  • “/curviate-engage”

Requirements

  • Node.js
  • A credential in CURVIATE_API_KEY

What it can do on your machine

Read from SKILL.md and the folder at commit c0ca7da. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • CURVIATE_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Curviate Engage loads about 3.8k tokens when it runs. Until then it costs about 132 tokens; SKILL.md has 1,808 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~132
When it runs · the whole SKILL.md, loaded when a task matches
~3.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from davila7/claude-code-templates at commit c0ca7da, republished under its MIT licence (© davila7). 1,808 words, ~3,806 tokens.

Download SKILL.mdSave it as .claude/skills/curviate-engage/SKILL.md (or your agent's skills folder).
name
curviate-engage
description
Create and engage with LinkedIn content using the Curviate CLI. Covers `post` (get, create, react, unreact, reactions, delete, save, saved, unsave, user-posts, user-reactions), `comment` (list, add, reply, edit, delete, replies, react, unreact, reactions, user), `feed home` and `notification`. Carries the write-versus-read reaction vocabularies, post-identifier forms, and the pagination trap on reaction lists. Use when posting, commenting, reacting, reading the home feed, or working through notifications.
version
0.1.0
author
Curviate
license
MIT
tags
LinkedIn, CLI, Agents, Sales, Recruiting, Outreach
repository
https://github.com/Curviate/curviate-plugin

Curviate: posts, comments, reactions, feed

Engagement is the cheapest way to be visible, and every write here is public and attributable. Two vocabularies and three identifier forms cause most failures; both are below.

Command surface established against CLI 0.33.0.

Before any command

bash
npm install -g @curviate/cli && curviate --version    # needs Node 18 or newer
curviate login --api-key <key>                        # or export CURVIATE_API_KEY
curviate account list --json                          # the acc_id for --account
  • Credentials resolve flag > environment > stored profile (CURVIATE_API_KEY, CURVIATE_BASE_URL, CURVIATE_ACCOUNT).
  • --profile <name> picks the stored credential set; --account <acc_id> picks which connected LinkedIn account posts, comments or reacts. Name it explicitly on every write: a comment from the wrong account is public and permanent.
  • --preview before every write. It renders the resolved request without sending. On a read command it is refused with exit 2.
  • --json on anything you parse; --fields a,b,c to project; --verbose when a slim response looks suspiciously empty.
  • Put global flags at the end of the command.
  • Branch on the exit code, never on prose. See the table at the end.
  • These are not retrieval-mode commands: --mode/--max-age are refused here with unknown flag, exit 2 (see curviate-profile for the four commands that do accept them).
Text input

Post and comment text is a positional argument, and - reads stdin. Use a quoted heredoc: the quoted delimiter disables every shell expansion, so apostrophes, accents, $ and backticks survive intact:

bash
cat <<'EOF' | curviate post create - --preview
Line one.

Line two.
EOF

Identifiers

A post id comes in three forms and the commands are not uniformly forgiving:

  • The numeric activity id (7459869580333576193) is the canonical form.
  • urn:li:activity:<N> works.
  • A full share URL is accepted and the id extracted from it. If a command ever rejects one, extract it yourself: POST_ID=$(echo "<share_url>" | grep -oP 'activity[-/]\K\d+').
  • Some builds have rejected the bare numeric id at write time on post react, comment add and comment list while --preview on the same command rendered fine. If you hit that, pass the base64 id from whatever post get, post create or list response you already hold: no extra fetch needed.

In every comment command, <post_id> is the original post's id, never the comment's. <comment_id> comes from comment list <post_id> as items[].id.

post get answers with social_id (a URN); the numeric id you passed is not echoed back.

post

CommandWhat it doesConfidence
curviate post get <post_id>One post. Adds is_repost, reposted_by, user_reacted and a richer author (headline, slug) over what a list carries.proven
curviate post create "<text>"Publish a post. --attach is repeatable for images and takes jpg, png, gif, mp4 or pdf; a single PDF produces a document post.proven
curviate post react <post_id> <reaction>React to a post. --as-organization <id> reacts as a company page you administer. Duplicate reactions succeed silently.proven
curviate post unreact <post_id> <reaction>Remove your reaction.proven
curviate post reactions <post_id>Reactions on a post: {value, author: {id, type, name, headline, profile_url, profile_picture_url, network_distance?}}. Page default 20, maximum 50. No timestamp exists.proven
curviate post delete <post_id>Delete a post you own.proven
curviate post save <post_id>Save to your private bookmark list. Never notifies the author, never visible to anyone else. Idempotent.proven
curviate post unsave <post_id>Remove from the bookmark list. Idempotent.proven
curviate post savedYour saved posts, newest first. Each item is a preview with the snippet capped at 140 characters.proven
curviate post user-posts <id|me>A member's own posts. Same data as profile <id> --posts.proven
curviate post user-reactions <id|me>A member's own reactions. Same data as profile <id> --reactions.proven
Reaction vocabularies: write is not read
Write (post react, comment react, lowercase)Read (value, user_reacted)
likeLIKE (confirmed pairing)
celebratePRAISE (confirmed pairing)
insightfulINTEREST (confirmed pairing)
supportAPPRECIATION (pairing unconfirmed)
loveEMPATHY (pairing unconfirmed)
funnyENTERTAINMENT (pairing unconfirmed)

Sending an uppercase read value as a write returns INVALID_REQUEST, exit 2. Always write lowercase. Read-side casing has been observed to vary, so compare reaction values case-insensitively when parsing post reactions, comment reactions, or user_reacted.

Traps
  • post reactions returns cursor: null while more reactions remain. A single page is not the reaction list. Use --all, and check the final line for {"object": "stream_truncated", …, "has_more": true}.
  • Check user_reacted on post get before reacting: a duplicate reaction succeeds silently and tells you nothing.
  • A very recent create or delete can take minutes to appear in post user-posts (LinkedIn-side indexing). post get <post_id> reflects it immediately.
  • The post list carries no is_repost field. Detect a repost by comparing the item's author name against the member you queried, or call post get <post_id> --fields is_repost,reposted_by. On a repost, author is the original creator and reposted_by is the sharer.
  • A company reactor carries no network_distance: the key is absent, not null. Treat author.type == "COMPANY" as its own signal rather than as missing data.
  • A list item already carries id, parsed_datetime, full text, reaction_counter, comment_counter, repost_counter, impressions_counter, author and attachments, so most "read a post" questions need no post get at all.

comment

CommandWhat it doesConfidence
curviate comment list <post_id>Top-level comments. Returns id and social_id (chain into comment react/reply), reply_counter (above 0 means nested replies exist) and author.profile_url.proven
curviate comment add <post_id> "<text>"Comment on a post. Returns the new comment's id. --attach takes at most one image.proven
curviate comment reply <post_id> <comment_id> "<text>"Reply to a specific comment.proven
curviate comment edit <post_id> <comment_id> "<text>"Edit your own comment.proven
curviate comment delete <post_id> <comment_id>Delete your own comment.proven
curviate comment replies <post_id> <comment_id>Replies to one comment.proven
curviate comment react <post_id> <comment_id> <reaction>React to a specific comment (not the post). Same lowercase write vocabulary.proven
curviate comment unreact <post_id> <comment_id> <reaction>Remove that reaction.proven
curviate comment reactions <post_id> <comment_id>Reactions on one comment.proven
curviate comment user <id|me>Comments a member authored. Same data as profile <id> --comments; each carries post_id for context.proven
  • comment list returns only what is visible to you. The post's own comment_counter is always greater than or equal to the items returned, so a mismatch is not a bug.
  • parsed_datetime is always null on a comment: use date for the ISO timestamp.
  • To check whether you already commented on a post, match on parent_post.share_url, never on ids. parent_post.id is base64 of a two-element array ([comment_activity, post_activity]) while a post's own id is a one-element array, so an id comparison is always false. If you need the id, decode and take element [1].
  • A very recent add or delete can take minutes to appear in comment list.
Show full SKILL.md (771 more words)Show less

feed and notification

CommandWhat it doesConfidence
curviate feed homeThe connected account's home feed as agent-actionable posts. --sort recent (default, reverse-chronological, always available) or --sort relevant (LinkedIn's ranked feed, which draws on a shared throttled budget). --sort is ignored when --cursor is supplied.proven
curviate notification listNotification cards, newest first, with the unread badge and a poll watermark. --filter selects the stream: all (default), jobs, mentions, my_posts, my_posts_comments, my_posts_reactions, my_posts_reposts.proven
curviate notification delete <card_urn>Delete one of your own notification cards. Idempotent, cannot be undone.proven
curviate notification show-less <card_urn>Apply "show less like this" to a card's source. For network-activity cards this removes the card, the same as delete. Idempotent, cannot be undone.proven

The feed and the notification stream are the two cheapest sources of a genuinely current thing to engage with: reach for them before searching for something to react to.

Full command surface

<!-- generated: command surface, CLI 0.33.0 -->

Read from the CLI's own --help at version 0.33.0. Descriptions, traps and confidence tags elsewhere in this skill are hand-written and carry the version they were established against.

Every command below that takes flags at all also accepts --account, --api-key, --base-url, --beta, --json, --preview, --profile, --timeout, --verbose.

CommandArgumentsFlags
curviate post getPOSTID--fields, --limit, --cursor
curviate post createTEXT--attach
curviate post reactPOSTID REACTION-reaction, --reactionAlias, --as-organization
curviate post reactionsPOSTID--fields, --limit, --cursor, --all, --max-pages, --page-delay
curviate post deletePOSTID--fields
curviate post unreactPOSTID REACTION--fields
curviate post saved(none)--fields, --limit, --cursor, --all, --max-pages, --page-delay
curviate post savePOSTID--fields
curviate post unsavePOSTID--fields
curviate post user-postsUSERID--fields, --limit, --cursor, --all, --max-pages, --page-delay
curviate post user-reactionsUSERID--fields, --limit, --cursor, --all, --max-pages, --page-delay
curviate comment listPOSTID--fields, --limit, --cursor, --all, --max-pages, --page-delay
curviate comment addPOSTID TEXT--fields, --attach
curviate comment replyPOSTID COMMENTID TEXT--fields, --attach
curviate comment editPOSTID COMMENTID TEXT--fields
curviate comment deletePOSTID COMMENTID--fields
curviate comment repliesPOSTID COMMENTID--fields, --limit, --cursor, --all, --max-pages, --page-delay
curviate comment reactPOSTID COMMENTID REACTION--fields
curviate comment reactionsPOSTID COMMENTID--fields, --limit, --cursor, --all, --max-pages, --page-delay
curviate comment unreactPOSTID COMMENTID REACTION--fields
curviate comment userUSERID--fields, --limit, --cursor, --all, --max-pages, --page-delay
curviate feed home(none)--fields, --limit, --cursor, --all, --max-pages, --page-delay, --sort
curviate notification list(none)--fields, --limit, --cursor, --all, --max-pages, --page-delay, --filter
curviate notification deleteCARDURN--fields
curviate notification show-lessCARDURN--fields
<!-- /generated -->

Exit codes to branch on here

CodeMeaningWhat to do
1INTERNAL from the server itself: a genuine bug on the platform side.Worth one retry; if it repeats it is a bug to report, not a state to work around.
2Usage or invalid input, often raised before any network call: an uppercase reaction value, a malformed post id, more than one attachment on a comment.Fix the invocation. Never retry unchanged.
4Not found, usually a wrong identifier form rather than a missing post.Re-derive the id before concluding the post is gone.
5Three causes, one code: read error.code. NO_ACTIVE_SEAT: the account is on no active seat. LINKEDIN_FEATURE_NOT_SUBSCRIBED: LinkedIn itself lacks the feature. BETA_NOT_ENABLED: the operation is beta-gated and this workspace has not opted in (pass --beta for one call, or a human enables it in Settings).Branch on error.code: the three fixes have nothing in common, and none is fixed by retrying unchanged.
6PLATFORM_RATE_LIMIT and its siblings. Carries retry_after in whole seconds. A response naming budgetRow means only that row is paused; every other row on the account keeps working.Back off and retry after that many seconds. On a named budgetRow, switch to other work on the account rather than backing off across the board.
7Transient platform fault: a hiccup, or a request that got no response at all (network error, DNS failure, timeout) or one that came back as something other than a valid API answer. Carries retryLikelyToSucceed: true.Retry with backoff.
8Account or connection state. Read error.code.LINKEDIN_OPERATION_NOT_SUPPORTED is permanent and never retryable; a session error needs a reconnect.
13BUDGET_EXHAUSTED: a safety rule of your own refused the action, not LinkedIn. Read error.safetyReason: ceiling means the row named in error.budgetRow hit its configured limit; activity_window means the account is outside the hours it works in (no budgetRow on that one). Nothing reached LinkedIn and nothing was spent; nothing was posted. reset_at can be weeks out, and may be null where no clock frees it.Do not back off and retry. error.safetyHint.parameter names the exact setting to change. Read quotas[] via curviate account get <acc_id> --json, then wait for the named reset or change that setting.

© davila7, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in cli-tool/components/skills/curviate/curviate-engage of davila7/claude-code-templates.

Open the folder on GitHubat commit c0ca7da

Compare with similar skills

Curviate Engage next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Curviate Engage compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Curviate Engage this skilldavila7/claude-code-templates33k—~3.8kAutomated safety check: PassMIT
Build Resume Portfolio Sitetao943/build-resume-portfolio-site195—~5.8kAutomated safety check: PassNone
Job Hunt Skillyanliudesign/offer-toolkit-skill520—~942Automated safety check: PassMIT
Network Scanproficientlyjobs/proficiently-claude-skills4111 repos~2.6kAutomated safety check: PassNone
Flyai X402alextitonis/fly.ai141—~1.6kAutomated safety check: PassMIT
Discord Readerhimself65/finance-skills3.4k—~1.8kAutomated safety check: PassMIT

Similar skills

  • Build Resume Portfolio Site

    tao943/build-resume-portfolio-site

    A skill your agent uses when turning resume materials and an optional job description into verified, approved content and a runnable React + Vite resume or portfolio site, or when redesigning an…

    195 GitHub stars~5.8k tokensUpdated 11 days ago
    Business, Finance & HRAuto-check passed
  • Job Hunt Skill

    yanliudesign/offer-toolkit-skill

    批量发现、整理和持续维护求职岗位清单。根据用户的简历、目标方向或种子 JD,搜索 LinkedIn 与公开网页,去重并建立尽量完整的候选池,用证据区分已核验事实和方向性推断,最后生成可搜索、可筛选的单文件 HTML job-hunt-skill 报告。用户说‘帮我批量找岗位’、‘整理职位清单’、‘使用 job-hunt-skill’、‘根据简历搜工作’、‘把这些 LinkedIn…

    520 GitHub stars~942 tokensUpdated 12 days ago
    Business, Finance & HRAuto-check passed
  • Network Scan

    proficientlyjobs/proficiently-claude-skills

    Scan your LinkedIn contacts' companies for matching job openings

    411 GitHub starsUsed in 1 repo~2.6k tokens
    Business, Finance & HRAuto-check passed
  • Flyai X402

    alextitonis/fly.ai

    Buy single answers from fly.ai's pay-per-request API, a few cents each over x402 (USDG on Robinhood Chain or USDC on Base) - the fly desk model's read of a Polymarket market, a TimesFM forecast for…

    141 GitHub stars~1.6k tokensUpdated yesterday
    Business, Finance & HRAuto-check passed
  • Discord Reader

    himself65/finance-skills

    Read Discord for financial research through opencli connected to the Discord desktop app: servers, channels, members, recent messages in the active channel, and message search.

    3.4k GitHub stars~1.8k tokensUpdated 6 days ago
    Business, Finance & HRAuto-check passed
  • Apify Buying Signal Detection

    apify/awesome-skills

    Official

    Set up a recurring buying-signal detection pipeline that finds companies showing buying intent across three signal types — job postings (hiring for the persona), fundraising events (recent raises)…

    266 GitHub stars~5.1k tokensUpdated 18 days ago
    Business, Finance & HRAuto-check: notes

More from davila7/claude-code-templates

All 479 skills in this repo
  • Perplexity Web Search

    davila7/claude-code-templates

    Runs web-grounded searches through Perplexity's Sonar models over OpenRouter for current events, recent literature and cited facts beyond the model's training cutoff.

    33k GitHub starsUsed in 11 repos~3.5k tokens
    Auto-check: notes
  • Neuropixels Data Analysis

    davila7/claude-code-templates

    Analyzes Neuropixels recordings from SpikeGLX or Open Ephys through preprocessing, drift correction, Kilosort4 spike sorting, quality metrics and curation.

    33k GitHub starsUsed in 9 repos~2.8k tokens
    Auto-check passed
  • Scientific Venue Templates

    davila7/claude-code-templates

    Supplies LaTeX templates and formatting rules for journals, conferences, posters, and grant proposals, then can check a draft against them.

    33k GitHub starsUsed in 9 repos~5.1k tokens
    Auto-check: notes
  • Brand Voice Content Creator

    davila7/claude-code-templates

    Analyzes a brand's existing writing to lock in a consistent voice, then builds SEO blog posts and platform-specific social content around it.

    33k GitHub starsUsed in 3 repos~1.9k tokens
    Auto-check passed
  • CAPA Officer

    davila7/claude-code-templates

    Guides corrective and preventive action (CAPA) work in a quality management system, from initiation and root cause analysis through effectiveness verification.

    33k GitHub starsUsed in 1 repo~2k tokens
    Auto-check passed
  • Fda Consultant Specialist

    davila7/claude-code-templates

    Senior FDA consultant and specialist for medical device companies including HIPAA compliance and requirement management.

    33k GitHub starsUsed in 1 repo~2.7k tokens
    Auto-check passed

Works with

Questions about Curviate Engage

What does Curviate Engage do?

Create and engage with LinkedIn content using the Curviate CLI. Curviate Engage is an agent skill from davila7/claude-code-templates. Create and engage with LinkedIn content using the Curviate CLI.

When should I use Curviate Engage?

Curviate Engage fits situations like: reading the home feed; working through notifications.

How do I install Curviate Engage in Claude Code?

Run `npx skills add davila7/claude-code-templates --skill curviate-engage -a claude-code`. Or copy the skill folder (cli-tool/components/skills/curviate/curviate-engage in davila7/claude-code-templates) into .claude/skills/curviate-engage in your project. Claude Code loads it when a task matches its description.

How do I install Curviate Engage in Codex?

Run `npx skills add davila7/claude-code-templates --skill curviate-engage -a codex`. Or copy the skill folder (cli-tool/components/skills/curviate/curviate-engage in davila7/claude-code-templates) into .agents/skills/curviate-engage in your project. Codex loads it when a task matches its description.

Can I use Curviate Engage in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add davila7/claude-code-templates --skill curviate-engage -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/curviate-engage, .gemini/skills/curviate-engage, .github/skills/curviate-engage and .opencode/skills/curviate-engage in your project.

What does Curviate Engage need to run?

Going by SKILL.md and its folder, Curviate Engage needs the command-line tools its instructions call (npm) and credentials named CURVIATE_API_KEY. Our summary lists: Node.js; A credential in CURVIATE_API_KEY.

Does Curviate Engage access the network?

SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Curviate Engage safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Curviate Engage use?

Curviate Engage is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Curviate Engage use?

About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Curviate Engage?

Skills that share tags, products or a category with Curviate Engage: Build Resume Portfolio Site (tao943/build-resume-portfolio-site, 195 stars), Job Hunt Skill (yanliudesign/offer-toolkit-skill, 520 stars), Network Scan (proficientlyjobs/proficiently-claude-skills, 411 stars) and Flyai X402 (alextitonis/fly.ai, 141 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Curviate Engage?

davila7 (a GitHub user) maintains it in davila7/claude-code-templates, which has 32,512 GitHub stars. The repository holds 479 skills in this directory. The repository was last updated on October 10, 2026.

Source: davila7/claude-code-templates on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.