Agent skill

Curviate Search

by davila7 in davila7/claude-code-templates

Find people, companies, posts, jobs, service providers and groups on LinkedIn with the Curviate CLI.

MITAuto-check passedBusiness, Finance & HR

Install Curviate Search

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

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

GitHub CLI
$ gh skill install davila7/claude-code-templates curviate-search --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-search .claude/skills/curviate-search && 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-search
GitHub stars
33k
Token cost
~3.4k tokens
SKILL.md length
1,492 words
Files
1
Skills in repo
479
Repo updated
First seen
Licence
MIT

At a glance

Find people, companies, posts, jobs, service providers and groups on LinkedIn with the Curviate CLI.

  • Sourcing prospects
  • SKILL.md covers Before any command, Resolve filter terms first, The search commands and Groups, plus 3 more sections
  • Calls npm; needs CURVIATE_API_KEY
  • Qualifying companies

What it does

Curviate Search is an agent skill from davila7/claude-code-templates. Find people, companies, posts, jobs, service providers and groups on LinkedIn with the Curviate CLI. Covers search people|companies|posts|jobs|services|groups, running a pasted LinkedIn search URL directly, the group read commands, pagination with --all, and the filter traps that silently return unfiltered results. Use when sourcing prospects or candidates, qualifying companies, finding posts or job postings to engage with, or resolving a group.

Its SKILL.md is about 3.4k 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 LinkedIn. The repository describes itself as: CLI tool for configuring and monitoring Claude Code. The licence is MIT.

When your agent uses it

  • Sourcing prospects
  • Qualifying companies
  • Job postings to engage with
  • Resolving a group

Example prompts

  • “/curviate-search”

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 Search loads about 3.4k tokens when it runs. Until then it costs about 118 tokens; SKILL.md has 1,492 words of instructions outside code blocks.

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

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,492 words, ~3,356 tokens.

Download SKILL.mdSave it as .claude/skills/curviate-search/SKILL.md (or your agent's skills folder).
name
curviate-search
description
Find people, companies, posts, jobs, service providers and groups on LinkedIn with the Curviate CLI. Covers `search people|companies|posts|jobs|services|groups`, running a pasted LinkedIn search URL directly, the `group` read commands, pagination with `--all`, and the filter traps that silently return unfiltered results. Use when sourcing prospects or candidates, qualifying companies, finding posts or job postings to engage with, or resolving a group.
version
0.1.0
author
Curviate
license
MIT
tags
LinkedIn, CLI, Agents, Sales, Recruiting, Outreach
repository
https://github.com/Curviate/curviate-plugin

Curviate: search and discovery

Search is where most workflows start: find the person, the company, the post or the posting, then act on it. Two rules decide whether a search is trustworthy, and both fail silently when broken: structured filters take opaque ids, never human text, and a single page is not the result set.

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 performs this command. They answer different questions; pass either or both. --account takes an id, never an account name.
  • --json on anything you parse; --fields a,b,c to keep result sets small; --verbose when a slim response looks suspiciously empty.
  • Put global flags at the end of the command. Trailing placement is unambiguous on every version.
  • Branch on the exit code, never on prose. See the table at the end.
  • Search is a read. --mode/--max-age are refused here with unknown flag, exit 2. Retrieval mode exists on four commands only, and none of them is a search (see curviate-profile).

Resolve filter terms first

Every id-taking filter (--location, --industry, --company, --school, --title on jobs, --service-category) must be resolved before use:

bash
curviate search parameters --type LOCATION --keywords "Germany" --limit 5 --json
curviate search people --keywords "AI engineer" --location <id> --limit 25 --json

A filter value that is a name rather than an id is silently dropped and the search runs unfiltered, at exit 0. --location "Germany" has returned New York, Bengaluru and Toronto with no warning. There is no error to branch on; the only defence is resolving first. Full parameter-type list and the resolution quirks are in curviate-profile.

The search commands

CommandWhat it doesConfidence
curviate search people --keywords "…"Member search. Filters: --industry, --location, --company, --past-company, --school, --network-distance (1-3), --connections-of, --followers-of, --title (free text), --profile-language.proven
curviate search companies --keywords "…"Company search. Filters: --industry, --location, --has-job-offers, --headcount.proven
curviate search posts --keywords "…"Post search. Filters: --sort-by, --date-posted (past_day, past_week, past_month), --content-type (videos, images, live_videos, collaborative_articles, documents), --posted-by-member, --posted-by-company, --posted-by-me, --mentioning-member, --mentioning-company, --author-industry, --author-company, --author-keywords.proven
curviate search jobs --keywords "…"Job-posting search. Filters: --location (single id) or --region, --location-within-area <miles>, --industry, --seniority, --function, --job-type, --company, --title (ids), --presence (on_site, hybrid, remote), --benefits, --commitments, --date-posted (a number of days), --has-verifications, --under-10-applicants, --in-your-network, --fair-chance-employer, --sort-by.proven
curviate search services --keywords "…"Services Marketplace providers. At least one of --keywords, --service-category or --location is required. Also --connections (1, 2, 3) and --language.proven
curviate search groups "<query>"Keyword search for groups. A no-match search returns an empty list, not an error.proven
curviate search "<pasted URL>"Runs a pasted LinkedIn search, saved-search or lead-list URL directly. Reach for it when you already built the filters in the LinkedIn UI.proven

--filters '<json>', --filters-file <path> and --filters - (stdin) submit a raw filter body on people, companies, posts and jobs. Named flags win on conflict, and the server body schema is strict: an unknown field is a 400, not an ignored key.

Traps
  • --industry is a company's registered LinkedIn industry, not a topic. Pairing it with a cross-cutting technology theme silently excludes nearly everything relevant: adding an AI-flavoured industry filter to an otherwise identical function-plus-keywords search dropped a result set from 6,360 to 18. Most companies hiring for an AI role are registered under "Software Development" or "IT Services". Use --keywords and --function for themes; keep --industry for genuine vertical targeting (healthcare, financial services, construction).

  • search people --title is free-text; search jobs --title is id-based. Resolving a job-title id and passing it to search people --title silently has no effect: the id is treated as a substring that matches nothing useful.

  • --network-distance and --location together have returned a 400 on search people. Pick one or the other however the values were resolved.

  • A salary threshold in the raw filter body is unreliable in low-transparency markets. In Germany, three drastically different thresholds against the same search returned identical, unfiltered counts with no error; LinkedIn's salary data is too sparse there to filter against. Spot-check a filtered against an unfiltered count before qualifying leads by salary.

  • Job postings can carry company: null, even under --verbose; agency and confidential listings are a legitimate LinkedIn state. Skip them rather than assuming every result has a company.

  • Classic job search has no company-size filter. For "mid-size-or-larger companies hiring for X", qualify by size first and then scope the job search to those companies:

    bash
    curviate search companies --headcount 201-500,501-1000 --location <loc_id> --json
    curviate search jobs --company <id1>,<id2>,<id3> --function eng --json

    The reverse direction (search jobs, then fetch each company to check size) works but is an N+1 with no batch lookup. Use it only when the posting itself is the entry point.

  • --headcount 10001+ is not yet supported. Omit that bucket.

Groups

CommandWhat it doesConfidence
curviate group listGroups the connected account belongs to: a complete read. --target <slug|URL> enumerates another member's groups instead, which is a partial, interests-only read.proven
curviate group get <group_id>One group's detail: name, member count, description, admin contact, and the write-feasibility gates.proven
curviate group members <group_id>The member roster: id, profile URL, name, headline, relationship signal. --name filters by prefix or substring, case-insensitively. Requires that the connected account is a member of the group.proven
Show full SKILL.md (658 more words)Show less

Pagination: one page is not the result set

There is no --page N.

FlagEffect
--limit NItems per page.
--cursor <c>Resume from a cursor returned by a previous response.
--allStream every page as NDJSON, one object per line.
--max-pages NCap how many pages --all fetches.
--page-delay <ms>Pause between pages (default 400; 0 disables). A modest delay keeps a long stream under the platform rate gate.

Two output shapes, and they parse differently: a single page is an envelope ({"object": "…_list", "items": [...], "cursor": …}), while --all is NDJSON. Some searches add paging.total_count.

--all can stop early. Its last stdout line is then {"object": "stream_truncated", "pages_fetched": N, "has_more": true}. Check for that line before treating a stream as exhaustive.

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, --fields, --json, --preview, --profile, --timeout, --verbose.

CommandArgumentsFlags
curviate searchURL--limit, --cursor, --all, --max-pages, --page-delay
curviate search people(none)--limit, --cursor, --all, --max-pages, --page-delay, --keywords, --filters, --filters-file, --industry, --location, --company, --past-company, --school, --network-distance, --connections-of, --followers-of, --title, --profile-language
curviate search companies(none)--limit, --cursor, --all, --max-pages, --page-delay, --keywords, --filters, --filters-file, --industry, --location, --has-job-offers, --headcount
curviate search posts(none)--limit, --cursor, --all, --max-pages, --page-delay, --keywords, --filters, --filters-file, --sort-by, --date-posted, --content-type, --posted-by-member, --posted-by-company, --posted-by-me, --mentioning-member, --mentioning-company, --author-industry, --author-company, --author-keywords
curviate search jobs(none)--limit, --cursor, --all, --max-pages, --page-delay, --keywords, --filters, --filters-file, --location, --industry, --seniority, --function, --job-type, --company, --sort-by, --date-posted, --region, --title, --presence, --benefits, --commitments, --has-verifications, --under-10-applicants, --in-your-network, --fair-chance-employer, --location-within-area
curviate search groupsQUERY--limit, --cursor, --all, --max-pages, --page-delay
curviate search services(none)--limit, --cursor, --all, --max-pages, --page-delay, --keywords, --service-category, --location, --connections, --language
curviate group list(none)--limit, --cursor, --all, --max-pages, --page-delay, --target
curviate group getGROUPID(none)
curviate group membersGROUPID--limit, --cursor, --all, --max-pages, --page-delay, --name
<!-- /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, usually raised before any network call: an unknown flag, a malformed id, a filter body the strict schema rejected.Fix the invocation. Never retry unchanged.
4Not found.Wrong identifier form, or the resource 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.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. A long --all walk is the usual cause; raise --page-delay. 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.
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. 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-search of davila7/claude-code-templates.

Open the folder on GitHubat commit c0ca7da

Compare with similar skills

Curviate Search 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 Search compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Curviate Search this skilldavila7/claude-code-templates33k—~3.4kAutomated safety check: PassMIT
Job Hunt Skillyanliudesign/offer-toolkit-skill520—~942Automated safety check: PassMIT
Network Scanproficientlyjobs/proficiently-claude-skills4111 repos~2.6kAutomated safety check: PassNone
Apify Buying Signal Detectionapify/awesome-skills266—~5.1kAutomated safety check: NotesApache-2.0
Candidate Briefyc-software/recruiting115—~1.1kAutomated safety check: NotesNone
Outreachandrew-shwetzer/career-ops-plugin-do-not-fork-currently-updating-v2-502—~939Automated safety check: PassMIT

Similar skills

  • 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
  • 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
  • Candidate Brief

    yc-software/recruiting

    Generate a quick one-paragraph brief on a candidate by pulling from all available sources.

    115 GitHub stars~1.1k tokensUpdated 1 mo ago
    Business, Finance & HRAuto-check: notes
  • Outreach

    andrew-shwetzer/career-ops-plugin-do-not-fork-currently-updating-v2-

    Draft personalized outreach messages for LinkedIn connections, hiring managers, or recruiters.

    502 GitHub stars~939 tokensUpdated 2 mo ago
    Business, Finance & HRAuto-check passed
  • Setup

    proficientlyjobs/proficiently-claude-skills

    One-time onboarding - upload resume, set preferences, and do a work history interview

    411 GitHub stars~1.4k tokensUpdated 7 mo ago
    Business, Finance & HRAuto-check passed

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 Search

What does Curviate Search do?

Find people, companies, posts, jobs, service providers and groups on LinkedIn with the Curviate CLI. Curviate Search is an agent skill from davila7/claude-code-templates. Find people, companies, posts, jobs, service providers and groups on LinkedIn with the Curviate CLI.

When should I use Curviate Search?

Curviate Search fits situations like: sourcing prospects; qualifying companies; job postings to engage with; resolving a group.

How do I install Curviate Search in Claude Code?

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

How do I install Curviate Search in Codex?

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

Can I use Curviate Search 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-search -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-search, .gemini/skills/curviate-search, .github/skills/curviate-search and .opencode/skills/curviate-search in your project.

What does Curviate Search need to run?

Going by SKILL.md and its folder, Curviate Search 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 Search 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 Search 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 Search use?

Curviate Search 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 Search use?

About 3.4k tokens (SKILL.md is roughly 13k 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 Search?

Skills that share tags, products or a category with Curviate Search: Job Hunt Skill (yanliudesign/offer-toolkit-skill, 520 stars), Network Scan (proficientlyjobs/proficiently-claude-skills, 411 stars), Apify Buying Signal Detection (apify/awesome-skills, 266 stars) and Candidate Brief (yc-software/recruiting, 115 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Curviate Search?

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.