[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6AE9J8GHAGGPTPF3WWYZ7JR":3,"skill-same:01M6AE9J8GHAGGPTPF3WWYZ7JR":82},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":58,"commitSha":59,"skillDirectory":60,"forksCount":61,"repositoryHtmlUrl":62,"repositoryHomepageUrl":63,"ownerHtmlUrl":64,"ownerBlogUrl":65,"ownerDescription":66,"updatedAt":67,"install":68,"resources":81},"01M6AE9J8GHAGGPTPF3WWYZ7JR","curviate-search",null,"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.","davila7\u002Fclaude-code-templates","davila7","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6216945?v=4","01M6ADEWWFPS191NFM0Y1EX1JH","Daniel Avila","01M6ADJHGM78PHQRD3XZTFDVKK",33481,"MIT","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcurviate\u002Fcurviate-search\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"search","curviate search","curviate","sales","running","when","sourcing","posts","URL","with","people","filter","find people","commands","use","cli","read","linkedin","Providers","Recruiting","services","https","plugin","github","2026-11-10 10:12:30",false,"---\nname: curviate-search\ndescription: \"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.\"\nlicense: MIT\nmetadata:\n  version: 0.1.0\n  author: Curviate\n  tags: [LinkedIn, CLI, Agents, Sales, Recruiting, Outreach]\n  repository: https:\u002F\u002Fgithub.com\u002FCurviate\u002Fcurviate-plugin\n---\n\n# Curviate: search and discovery\n\nSearch is where most workflows start: find the person, the company, the post or the posting, then\nact on it. Two rules decide whether a search is trustworthy, and both fail silently when broken:\n**structured filters take opaque ids, never human text**, and **a single page is not the result set**.\n\nCommand surface established against CLI `0.33.0`.\n\n## Before any command\n\n```bash\nnpm install -g @curviate\u002Fcli && curviate --version    # needs Node 18 or newer\ncurviate login --api-key \u003Ckey>                        # or export CURVIATE_API_KEY\ncurviate account list --json                          # the acc_id for --account\n```\n\n- **Credentials resolve flag > environment > stored profile** (`CURVIATE_API_KEY`,\n  `CURVIATE_BASE_URL`, `CURVIATE_ACCOUNT`).\n- **`--profile \u003Cname>` picks the stored credential set; `--account \u003Cacc_id>` picks which connected\n  LinkedIn account performs this command.** They answer different questions; pass either or both.\n  `--account` takes an id, never an account name.\n- **`--json` on anything you parse**; **`--fields a,b,c`** to keep result sets small; **`--verbose`**\n  when a slim response looks suspiciously empty.\n- **Put global flags at the end of the command.** Trailing placement is unambiguous on every version.\n- **Branch on the exit code, never on prose.** See the table at the end.\n- Search is a read. `--mode`\u002F`--max-age` are refused here with `unknown flag`, exit `2`. Retrieval\n  mode exists on four commands only, and none of them is a search (see `curviate-profile`).\n\n## Resolve filter terms first\n\nEvery id-taking filter (`--location`, `--industry`, `--company`, `--school`, `--title` on jobs,\n`--service-category`) must be resolved before use:\n\n```bash\ncurviate search parameters --type LOCATION --keywords \"Germany\" --limit 5 --json\ncurviate search people --keywords \"AI engineer\" --location \u003Cid> --limit 25 --json\n```\n\n**A filter value that is a name rather than an id is silently dropped and the search runs\nunfiltered, at exit `0`.** `--location \"Germany\"` has returned New York, Bengaluru and Toronto with\nno warning. There is no error to branch on; the only defence is resolving first. Full parameter-type\nlist and the resolution quirks are in `curviate-profile`.\n\n## The search commands\n\n| Command | What it does | Confidence |\n|---|---|---|\n| `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 |\n| `curviate search companies --keywords \"…\"` | Company search. Filters: `--industry`, `--location`, `--has-job-offers`, `--headcount`. | proven |\n| `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 |\n| `curviate search jobs --keywords \"…\"` | Job-posting search. Filters: `--location` (single id) or `--region`, `--location-within-area \u003Cmiles>`, `--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 |\n| `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 |\n| `curviate search groups \"\u003Cquery>\"` | Keyword search for groups. A no-match search returns an empty list, not an error. | proven |\n| `curviate search \"\u003Cpasted 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 |\n\n`--filters '\u003Cjson>'`, `--filters-file \u003Cpath>` and `--filters -` (stdin) submit a raw filter body on\n`people`, `companies`, `posts` and `jobs`. Named flags win on conflict, and **the server body schema\nis strict**: an unknown field is a `400`, not an ignored key.\n\n### Traps\n\n- **`--industry` is a company's *registered* LinkedIn industry, not a topic.** Pairing it with a\n  cross-cutting technology theme silently excludes nearly everything relevant: adding an\n  AI-flavoured industry filter to an otherwise identical function-plus-keywords search dropped a\n  result set from 6,360 to 18. Most companies hiring for an AI role are registered under \"Software\n  Development\" or \"IT Services\". Use `--keywords` and `--function` for themes; keep `--industry` for\n  genuine vertical targeting (healthcare, financial services, construction).\n- **`search people --title` is free-text; `search jobs --title` is id-based.** Resolving a job-title\n  id and passing it to `search people --title` silently has no effect: the id is treated as a\n  substring that matches nothing useful.\n- **`--network-distance` and `--location` together have returned a `400` on `search people`.** Pick\n  one or the other however the values were resolved.\n- **A salary threshold in the raw filter body is unreliable in low-transparency markets.** In\n  Germany, three drastically different thresholds against the same search returned identical,\n  unfiltered counts with no error; LinkedIn's salary data is too sparse there to filter against.\n  Spot-check a filtered against an unfiltered count before qualifying leads by salary.\n- **Job postings can carry `company: null`**, even under `--verbose`; agency and confidential\n  listings are a legitimate LinkedIn state. Skip them rather than assuming every result has a\n  company.\n- **Classic job search has no company-size filter.** For \"mid-size-or-larger companies hiring for X\",\n  qualify by size first and then scope the job search to those companies:\n\n  ```bash\n  curviate search companies --headcount 201-500,501-1000 --location \u003Cloc_id> --json\n  curviate search jobs --company \u003Cid1>,\u003Cid2>,\u003Cid3> --function eng --json\n  ```\n\n  The reverse direction (search jobs, then fetch each company to check size) works but is an N+1\n  with no batch lookup. Use it only when the posting itself is the entry point.\n- **`--headcount 10001+` is not yet supported.** Omit that bucket.\n\n## Groups\n\n| Command | What it does | Confidence |\n|---|---|---|\n| `curviate group list` | Groups the connected account belongs to: a complete read. `--target \u003Cslug\\|URL>` enumerates another member's groups instead, which is a partial, interests-only read. | proven |\n| `curviate group get \u003Cgroup_id>` | One group's detail: name, member count, description, admin contact, and the write-feasibility gates. | proven |\n| `curviate group members \u003Cgroup_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 |\n\n## Pagination: one page is not the result set\n\nThere is no `--page N`.\n\n| Flag | Effect |\n|---|---|\n| `--limit N` | Items per page. |\n| `--cursor \u003Cc>` | Resume from a cursor returned by a previous response. |\n| `--all` | Stream every page as NDJSON, one object per line. |\n| `--max-pages N` | Cap how many pages `--all` fetches. |\n| `--page-delay \u003Cms>` | Pause between pages (default 400; `0` disables). A modest delay keeps a long stream under the platform rate gate. |\n\nTwo output shapes, and they parse differently: a single page is an envelope\n(`{\"object\": \"…_list\", \"items\": [...], \"cursor\": …}`), while `--all` is NDJSON. Some searches add\n`paging.total_count`.\n\n**`--all` can stop early.** Its last stdout line is then\n`{\"object\": \"stream_truncated\", \"pages_fetched\": N, \"has_more\": true}`. Check for that line before\ntreating a stream as exhaustive.\n\n## Full command surface\n\n\u003C!-- generated: command surface, CLI 0.33.0 -->\n\nRead from the CLI's own `--help` at version 0.33.0. Descriptions, traps and confidence\ntags elsewhere in this skill are hand-written and carry the version they were established against.\n\nEvery command below that takes flags at all also accepts `--account`, `--api-key`, `--base-url`, `--beta`, `--fields`, `--json`, `--preview`, `--profile`, `--timeout`, `--verbose`.\n\n| Command | Arguments | Flags |\n|---|---|---|\n| `curviate search` | `URL` | `--limit`, `--cursor`, `--all`, `--max-pages`, `--page-delay` |\n| `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` |\n| `curviate search companies` | *(none)* | `--limit`, `--cursor`, `--all`, `--max-pages`, `--page-delay`, `--keywords`, `--filters`, `--filters-file`, `--industry`, `--location`, `--has-job-offers`, `--headcount` |\n| `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` |\n| `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` |\n| `curviate search groups` | `QUERY` | `--limit`, `--cursor`, `--all`, `--max-pages`, `--page-delay` |\n| `curviate search services` | *(none)* | `--limit`, `--cursor`, `--all`, `--max-pages`, `--page-delay`, `--keywords`, `--service-category`, `--location`, `--connections`, `--language` |\n| `curviate group list` | *(none)* | `--limit`, `--cursor`, `--all`, `--max-pages`, `--page-delay`, `--target` |\n| `curviate group get` | `GROUPID` | *(none)* |\n| `curviate group members` | `GROUPID` | `--limit`, `--cursor`, `--all`, `--max-pages`, `--page-delay`, `--name` |\n\n\u003C!-- \u002Fgenerated -->\n\n## Exit codes to branch on here\n\n| Code | Meaning | What to do |\n|---|---|---|\n| `1` | `INTERNAL` 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. |\n| `2` | Usage 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. |\n| `4` | Not found. | Wrong identifier form, or the resource is gone. |\n| `5` | Three 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. |\n| `6` | `PLATFORM_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. |\n| `7` | Transient 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. |\n| `13` | `BUDGET_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 \u003Cacc_id> --json`, then wait for the named reset or change that setting. |\n","# Curviate: search and discovery\n\nSearch is where most workflows start: find the person, the company, the post or the posting, then\nact on it. Two rules decide whether a search is trustworthy, and both fail silently when broken:\n**structured filters take opaque ids, never human text**, and **a single page is not the result set**.\n\nCommand surface established against CLI `0.33.0`.\n\n## Before any command\n\n```bash\nnpm install -g @curviate\u002Fcli && curviate --version    # needs Node 18 or newer\ncurviate login --api-key \u003Ckey>                        # or export CURVIATE_API_KEY\ncurviate account list --json                          # the acc_id for --account\n```\n\n- **Credentials resolve flag > environment > stored profile** (`CURVIATE_API_KEY`,\n  `CURVIATE_BASE_URL`, `CURVIATE_ACCOUNT`).\n- **`--profile \u003Cname>` picks the stored credential set; `--account \u003Cacc_id>` picks which connected\n  LinkedIn account performs this command.** They answer different questions; pass either or both.\n  `--account` takes an id, never an account name.\n- **`--json` on anything you parse**; **`--fields a,b,c`** to keep result sets small; **`--verbose`**\n  when a slim response looks suspiciously empty.\n- **Put global flags at the end of the command.** Trailing placement is unambiguous on every version.\n- **Branch on the exit code, never on prose.** See the table at the end.\n- Search is a read. `--mode`\u002F`--max-age` are refused here with `unknown flag`, exit `2`. Retrieval\n  mode exists on four commands only, and none of them is a search (see `curviate-profile`).\n\n## Resolve filter terms first\n\nEvery id-taking filter (`--location`, `--industry`, `--company`, `--school`, `--title` on jobs,\n`--service-category`) must be resolved before use:\n\n```bash\ncurviate search parameters --type LOCATION --keywords \"Germany\" --limit 5 --json\ncurviate search people --keywords \"AI engineer\" --location \u003Cid> --limit 25 --json\n```\n\n**A filter value that is a name rather than an id is silently dropped and the search runs\nunfiltered, at exit `0`.** `--location \"Germany\"` has returned New York, Bengaluru and Toronto with\nno warning. There is no error to branch on; the only defence is resolving first. Full parameter-type\nlist and the resolution quirks are in `curviate-profile`.\n\n## The search commands\n\n| Command | What it does | Confidence |\n|---|---|---|\n| `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 |\n| `curviate search companies --keywords \"…\"` | Company search. Filters: `--industry`, `--location`, `--has-job-offers`, `--headcount`. | proven |\n| `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 |\n| `curviate search jobs --keywords \"…\"` | Job-posting search. Filters: `--location` (single id) or `--region`, `--location-within-area \u003Cmiles>`, `--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 |\n| `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 |\n| `curviate search groups \"\u003Cquery>\"` | Keyword search for groups. A no-match search returns an empty list, not an error. | proven |\n| `curviate search \"\u003Cpasted 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 |\n\n`--filters '\u003Cjson>'`, `--filters-file \u003Cpath>` and `--filters -` (stdin) submit a raw filter body on\n`people`, `companies`, `posts` and `jobs`. Named flags win on conflict, and **the server body schema\nis strict**: an unknown field is a `400`, not an ignored key.\n\n### Traps\n\n- **`--industry` is a company's *registered* LinkedIn industry, not a topic.** Pairing it with a\n  cross-cutting technology theme silently excludes nearly everything relevant: adding an\n  AI-flavoured industry filter to an otherwise identical function-plus-keywords search dropped a\n  result set from 6,360 to 18. Most companies hiring for an AI role are registered under \"Software\n  Development\" or \"IT Services\". Use `--keywords` and `--function` for themes; keep `--industry` for\n  genuine vertical targeting (healthcare, financial services, construction).\n- **`search people --title` is free-text; `search jobs --title` is id-based.** Resolving a job-title\n  id and passing it to `search people --title` silently has no effect: the id is treated as a\n  substring that matches nothing useful.\n- **`--network-distance` and `--location` together have returned a `400` on `search people`.** Pick\n  one or the other however the values were resolved.\n- **A salary threshold in the raw filter body is unreliable in low-transparency markets.** In\n  Germany, three drastically different thresholds against the same search returned identical,\n  unfiltered counts with no error; LinkedIn's salary data is too sparse there to filter against.\n  Spot-check a filtered against an unfiltered count before qualifying leads by salary.\n- **Job postings can carry `company: null`**, even under `--verbose`; agency and confidential\n  listings are a legitimate LinkedIn state. Skip them rather than assuming every result has a\n  company.\n- **Classic job search has no company-size filter.** For \"mid-size-or-larger companies hiring for X\",\n  qualify by size first and then scope the job search to those companies:\n\n  ```bash\n  curviate search companies --headcount 201-500,501-1000 --location \u003Cloc_id> --json\n  curviate search jobs --company \u003Cid1>,\u003Cid2>,\u003Cid3> --function eng --json\n  ```\n\n  The reverse direction (search jobs, then fetch each company to check size) works but is an N+1\n  with no batch lookup. Use it only when the posting itself is the entry point.\n- **`--headcount 10001+` is not yet supported.** Omit that bucket.\n\n## Groups\n\n| Command | What it does | Confidence |\n|---|---|---|\n| `curviate group list` | Groups the connected account belongs to: a complete read. `--target \u003Cslug\\|URL>` enumerates another member's groups instead, which is a partial, interests-only read. | proven |\n| `curviate group get \u003Cgroup_id>` | One group's detail: name, member count, description, admin contact, and the write-feasibility gates. | proven |\n| `curviate group members \u003Cgroup_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 |\n\n## Pagination: one page is not the result set\n\nThere is no `--page N`.\n\n| Flag | Effect |\n|---|---|\n| `--limit N` | Items per page. |\n| `--cursor \u003Cc>` | Resume from a cursor returned by a previous response. |\n| `--all` | Stream every page as NDJSON, one object per line. |\n| `--max-pages N` | Cap how many pages `--all` fetches. |\n| `--page-delay \u003Cms>` | Pause between pages (default 400; `0` disables). A modest delay keeps a long stream under the platform rate gate. |\n\nTwo output shapes, and they parse differently: a single page is an envelope\n(`{\"object\": \"…_list\", \"items\": [...], \"cursor\": …}`), while `--all` is NDJSON. Some searches add\n`paging.total_count`.\n\n**`--all` can stop early.** Its last stdout line is then\n`{\"object\": \"stream_truncated\", \"pages_fetched\": N, \"has_more\": true}`. Check for that line before\ntreating a stream as exhaustive.\n\n## Full command surface\n\n\u003C!-- generated: command surface, CLI 0.33.0 -->\n\nRead from the CLI's own `--help` at version 0.33.0. Descriptions, traps and confidence\ntags elsewhere in this skill are hand-written and carry the version they were established against.\n\nEvery command below that takes flags at all also accepts `--account`, `--api-key`, `--base-url`, `--beta`, `--fields`, `--json`, `--preview`, `--profile`, `--timeout`, `--verbose`.\n\n| Command | Arguments | Flags |\n|---|---|---|\n| `curviate search` | `URL` | `--limit`, `--cursor`, `--all`, `--max-pages`, `--page-delay` |\n| `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` |\n| `curviate search companies` | *(none)* | `--limit`, `--cursor`, `--all`, `--max-pages`, `--page-delay`, `--keywords`, `--filters`, `--filters-file`, `--industry`, `--location`, `--has-job-offers`, `--headcount` |\n| `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` |\n| `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` |\n| `curviate search groups` | `QUERY` | `--limit`, `--cursor`, `--all`, `--max-pages`, `--page-delay` |\n| `curviate search services` | *(none)* | `--limit`, `--cursor`, `--all`, `--max-pages`, `--page-delay`, `--keywords`, `--service-category`, `--location`, `--connections`, `--language` |\n| `curviate group list` | *(none)* | `--limit`, `--cursor`, `--all`, `--max-pages`, `--page-delay`, `--target` |\n| `curviate group get` | `GROUPID` | *(none)* |\n| `curviate group members` | `GROUPID` | `--limit`, `--cursor`, `--all`, `--max-pages`, `--page-delay`, `--name` |\n\n\u003C!-- \u002Fgenerated -->\n\n## Exit codes to branch on here\n\n| Code | Meaning | What to do |\n|---|---|---|\n| `1` | `INTERNAL` 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. |\n| `2` | Usage 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. |\n| `4` | Not found. | Wrong identifier form, or the resource is gone. |\n| `5` | Three 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. |\n| `6` | `PLATFORM_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. |\n| `7` | Transient 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. |\n| `13` | `BUDGET_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 \u003Cacc_id> --json`, then wait for the named reset or change that setting. |\n",{"name":5,"license":15,"metadata":48,"description":7},{"tags":49,"author":55,"version":56,"repository":57},[50,51,52,53,38,54],"LinkedIn","CLI","Agents","Sales","Outreach","Curviate","0.1.0","https:\u002F\u002Fgithub.com\u002FCurviate\u002Fcurviate-plugin","main","2b749c82b5d11fac39d9a6e021ce3f5b8a541bd1","cli-tool\u002Fcomponents\u002Fskills\u002Fcurviate\u002Fcurviate-search",3931,"https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates","https:\u002F\u002Faitmpl.com","https:\u002F\u002Fgithub.com\u002Fdavila7","https:\u002F\u002Fdanielavila.me","Building AI dev tools with LLMs","2026-11-14 06:14:46",{"source":8,"skillName":5,"commands":69,"prompt":79,"zipAvailable":80},[70,73,76],{"tool":71,"command":72},"npx","npx skills add davila7\u002Fclaude-code-templates --skill curviate-search",{"tool":74,"command":75},"bunx","bunx skills add davila7\u002Fclaude-code-templates --skill curviate-search",{"tool":77,"command":78},"pnpm","pnpm dlx skills add davila7\u002Fclaude-code-templates --skill curviate-search","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fcurviate\u002Fcurviate-search\u002FSKILL.md",true,[],[83,112,139,172,207,231],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":94,"publishedAt":43},"01M70NHBTQ8BV0A2SCAZXEPHCX","wealthville-pool-scoring","Score DeFi liquidity pools before providing liquidity. Returns a 0-100 pool score and an Enter\u002FHold\u002FExit\u002FReduce\u002FAvoid verdict with calibrated confidence for ~68,800 Solana pools and 575 EVM pools, plus a public miss-inclusive track record. Use when asked whether a pool is worth LPing into, which pools look best right now, or how accurate the scores have actually been.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fweb-data\u002Fwealthville-pool-scoring\u002FSKILL.md",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[95,96,97,98,99,100,101,102,33,24,103,28,104,105,106,107,108,109,110,111],"scoring","pool","wealthville pool scoring","liquidity","which","for","exit","now","reduce","record","track","verdict","evm","solana","how","public","look",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":119,"publishedAt":43},"01M70MB6VR8ERJ4EM8D5KHBMEV","technical-debt-auditor","Scans a codebase and produces a quantified technical debt report with a prioritized remediation plan. Analyzes dead code, TODO\u002FFIXME\u002FHACK markers, dependency staleness, complexity hotspots, code duplication signals, test coverage gaps, unused exports, and outdated patterns. Use this skill when the user asks to audit their codebase for tech debt, wants a health check of their code quality, says things like \"where should I focus refactoring\", \"find code smells\", \"audit my codebase\", \"what technical debt do we have\", \"prioritize cleanup work\", or asks about code quality metrics. Also trigger when the user mentions \"code rot\", \"legacy cleanup\", \"refactoring priorities\", or wants to understand the overall health of a project before a major effort. Trigger even if the user doesn't say \"technical debt\" explicitly — any request to systematically assess code quality and identify improvement priorities belongs here.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fdevelopment\u002Ftechnical-debt-auditor\u002FSKILL.md",[118],{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},[120,121,122,123,124,125,126,127,128,129,130,24,131,132,133,134,135,136,137,138],"technical debt","debt","technical","technical debt auditor","auditor","coverage","complexity","markers","project","cleanup","unused","code","todo","work","plan","focus","signals","audit","dependency",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":154,"publishedAt":43},"01M70KPYH9QNHCNME5GJQGE22K","readonly-sql-guard","Make an agent's database access provably read-only. Use when an agent runs caller-supplied SQL against a production\u002FERP\u002Fanalytics database (a \"query\" MCP tool, text-to-SQL, an admin console), or when reviewing DB-access code for write\u002FDDL\u002Fside-effect\u002Ftransaction-escape risks. Checks what a statement CALLS, not just its shape.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fdatabase\u002Freadonly-sql-guard\u002FSKILL.md",[145,148,149],{"categoryNo":146,"categoryName":147,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},{"categoryNo":150,"categoryName":151,"taxonomyType":152,"taxonomyTypeDesc":153},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[155,156,157,158,159,160,161,100,162,163,164,165,166,167,168,33,169,170,24,171],"readonly","guard","sql guard","sql","readonly sql guard","erp","effect","read-only","db","just","tool","calls","only","MCP","access","database","query",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":176,"licenseFileUrl":177,"sourceHtmlUrl":178,"categories":179,"keywords":183,"publishedAt":43},"01M6AFY6F7CC2BBZP1QD6VTNVC","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FSKILL.md",[180],{"categoryNo":181,"categoryName":182,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000009","前端开发",[184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,100,206],"artifacts builder","web","web artifacts builder","artifacts","builder","state","routing","state management","component","css","frontend","ui","Tools","file","components","shadcn","react","Tailwind","suite","jsx","html","single-file","ui components",{"skillNo":208,"name":209,"nameZh":6,"description":210,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":176,"licenseFileUrl":211,"sourceHtmlUrl":212,"categories":213,"keywords":218,"publishedAt":43},"01M6AFWF33SFV9Z3SF4PEEE4BF","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FSKILL.md",[214,217],{"categoryNo":215,"categoryName":216,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":181,"categoryName":182,"taxonomyType":92,"taxonomyTypeDesc":93},[219,220,221,222,223,185,224,194,195,225,226,227,228,100,229,28,230],"webapp testing","testing","webapp","browser","playwright","applications","debugging","toolkit","logs","screenshots","local","behavior",{"skillNo":232,"name":233,"nameZh":6,"description":234,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":176,"licenseFileUrl":235,"sourceHtmlUrl":236,"categories":237,"keywords":245,"publishedAt":43},"01M6AF67Q67JJJ5V51JR2P52KA","discernment-nudge","After you give a substantive answer or draft that the user may act on — advice or recommendations, drafted artifacts such as goals, plans, pitches, proposals, or emails, estimates or projections, analysis or interpretation of data, factual claims they may rely on, or a multi-step argument — invoke this skill BEFORE finalizing your reply and then, if it applies, append 2-3 short follow-up questions, each tied to something specific in what you just produced, that help the user check key facts, probe the reasoning or assumptions, and notice missing context. Do this at most once per conversation. Skip it when the user asked a trivial how-to or simple lookup, wants a purely educational explanation, asked you only to format, convert, or assemble a file from content they provided, is writing code they will run, is doing creative writing or casual chat, or already asked you to double-check, cite, or review — the skill file explains these boundaries and the exact output format.","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fdiscernment-nudge\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavila7\u002Fclaude-code-templates\u002Fblob\u002Fmain\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fdiscernment-nudge\u002FSKILL.md",[238,241,242],{"categoryNo":239,"categoryName":240,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},{"categoryNo":243,"categoryName":244,"taxonomyType":152,"taxonomyTypeDesc":153},"01JBSEEDCAT000000000000036","内容创作者",[246,247,248,249,250,251,252,253,187,254,197,131,255,256,257,258,259,167,260,24,261,262,263,264,265,109,266],"discernment nudge","nudge","interpretation","help","run","reasoning","data","writing","lookup","content","review","conversation","short","up","invoke","you","analysis","claims","argument","assemble","recommendations"]