Outreach
andrew-shwetzer/career-ops-plugin-do-not-fork-currently-updating-v2-
Draft personalized outreach messages for LinkedIn connections, hiring managers, or recruiters.
Create, publish and manage classic LinkedIn job postings with the Curviate CLI, and read their applicants.
$ npx skills add davila7/claude-code-templates --skill curviate-jobs -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install davila7/claude-code-templates curviate-jobs --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-jobs .claude/skills/curviate-jobs && rm -rf skills-srcUse ~/.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/
Install the "curviate-jobs" agent skill from https://github.com/davila7/claude-code-templates/tree/main/cli-tool/components/skills/curviate/curviate-jobs into .claude/skills/curviate-jobs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "curviate-jobs", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/davila7/claude-code-templates/tree/main/cli-tool/components/skills/curviate/curviate-jobsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add davila7/claude-code-templates --skill curviate-jobs -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install davila7/claude-code-templates curviate-jobs --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davila7/claude-code-templates.git skills-src && mkdir -p .agents/skills && cp -r skills-src/cli-tool/components/skills/curviate/curviate-jobs .agents/skills/curviate-jobs && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "curviate-jobs" agent skill from https://github.com/davila7/claude-code-templates/tree/main/cli-tool/components/skills/curviate/curviate-jobs into .agents/skills/curviate-jobs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "curviate-jobs", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add davila7/claude-code-templates --skill curviate-jobs -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install davila7/claude-code-templates curviate-jobs --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davila7/claude-code-templates.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/cli-tool/components/skills/curviate/curviate-jobs .cursor/skills/curviate-jobs && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "curviate-jobs" agent skill from https://github.com/davila7/claude-code-templates/tree/main/cli-tool/components/skills/curviate/curviate-jobs into .cursor/skills/curviate-jobs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "curviate-jobs", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/davila7/claude-code-templates.git --path cli-tool/components/skills/curviate/curviate-jobs--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add davila7/claude-code-templates --skill curviate-jobs -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install davila7/claude-code-templates curviate-jobs --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davila7/claude-code-templates.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/cli-tool/components/skills/curviate/curviate-jobs .gemini/skills/curviate-jobs && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "curviate-jobs" agent skill from https://github.com/davila7/claude-code-templates/tree/main/cli-tool/components/skills/curviate/curviate-jobs into .gemini/skills/curviate-jobs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "curviate-jobs", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install davila7/claude-code-templates curviate-jobsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add davila7/claude-code-templates --skill curviate-jobs -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/davila7/claude-code-templates.git skills-src && mkdir -p .github/skills && cp -r skills-src/cli-tool/components/skills/curviate/curviate-jobs .github/skills/curviate-jobs && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "curviate-jobs" agent skill from https://github.com/davila7/claude-code-templates/tree/main/cli-tool/components/skills/curviate/curviate-jobs into .github/skills/curviate-jobs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "curviate-jobs", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add davila7/claude-code-templates --skill curviate-jobs -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install davila7/claude-code-templates curviate-jobs --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/davila7/claude-code-templates.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/cli-tool/components/skills/curviate/curviate-jobs .opencode/skills/curviate-jobs && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "curviate-jobs" agent skill from https://github.com/davila7/claude-code-templates/tree/main/cli-tool/components/skills/curviate/curviate-jobs into .opencode/skills/curviate-jobs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "curviate-jobs", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
curviate-jobsCreate, publish and manage classic LinkedIn job postings with the Curviate CLI, and read their applicants.
Curviate Jobs is an agent skill from davila7/claude-code-templates. Create, publish and manage classic LinkedIn job postings with the Curviate CLI, and read their applicants. Covers job (get, list, create, update, budget, publish, close) and job applicants / job applicant get|resume, the draft-then-publish flow, the subscription gate that stops a publish even on the free mode, and the read-back delay after an update. Use when drafting or updating a posting, pricing or publishing one, closing one, or pulling applicants and résumés.
Its SKILL.md is about 2.7k 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, covering Recruiting and HR. It works with LinkedIn. The repository describes itself as: CLI tool for configuring and monitoring Claude Code. The licence is MIT.
Read from SKILL.md and the folder at commit c0ca7da. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names these keys or tokens, usually read from environment variables:
CURVIATE_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Curviate Jobs loads about 2.7k tokens when it runs. Until then it costs about 122 tokens; SKILL.md has 1,245 words of instructions outside code blocks.
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.
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.
The full file from davila7/claude-code-templates at commit c0ca7da, republished under its MIT licence (© davila7). 1,245 words, ~2,731 tokens.
.claude/skills/curviate-jobs/SKILL.md (or your agent's skills folder).Every posting starts as a draft. Drafts are free and reversible; publishing is neither. The two things that surprise agents here are that a free publish is still subscription-gated and that an update's read-back lags the write.
Command surface established against CLI 0.33.0.
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 --accountCURVIATE_API_KEY,
CURVIATE_BASE_URL, CURVIATE_ACCOUNT).--profile <name> picks the stored credential set; --account <acc_id> picks which connected
LinkedIn account owns the posting.--preview before every write, and especially before a publish. 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.--mode/--max-age are refused here with unknown flag,
exit 2. job publish --mode is a different flag with the same name: it selects a publishing
publishing mode and can spend real money. See curviate-profile for retrieval mode.| Command | What it does | Confidence |
|---|---|---|
curviate job get <id> | One public posting's full detail. Takes a job URL or a bare numeric id. No seat needed. | proven |
curviate job list --state <DRAFT|OPEN|CLOSED|REVIEW|SUSPENDED> | Your own postings by state. --state is required. | proven |
curviate job create … | Create a draft. Never publishes, never spends. | proven |
curviate job update <id> … | Partial update to a posting you own; same flags as create. | proven |
curviate job budget <id> | Price a publish before committing any money. | proven |
curviate job publish <id> --mode FREE|PROMOTED|PROMOTED_PLUS | Publish a draft. PROMOTED and PROMOTED_PLUS spend real money and additionally require --budget-currency (ISO-4217), --budget-amount and --budget-scope (DAILY or TOTAL). | wired, never live-fired |
curviate job close <id> | Stop a posting accepting applications. Irreversible once listed. | wired, never live-fired |
curviate job applicants <id> | Applicants to a posting you own. | proven (shape only, exercised on a draft with no applicants) |
curviate job applicant get <id> <applicant_id> | One applicant's full detail, including contact information. | proven (shape only) |
curviate job applicant resume <id> <applicant_id> | Download an applicant's résumé. Binary, write it with -o <file>. | proven (shape only) |
job create: the required set--description (minimum 200 characters, enforced server-side), --workplace-type
(ON_SITE|HYBRID|REMOTE), --location (a LOCATION parameter id, resolved via
curviate search parameters --type LOCATION), --employment-status
(FULL_TIME|PART_TIME|CONTRACT|TEMPORARY|OTHER|VOLUNTEER|INTERNSHIP), --apply-method
(linkedin or external), plus a title and a company.
--job-title as free text, or --job-title-id for an existing LinkedIn title.--company as free text, or --company-id.--apply-method linkedin requires --notification-email; --apply-method external requires
--website-url.--skills takes comma-separated skill parameter ids and is optional.Run curviate job create --help for the current required set before building a call.
--mode FREE (the
money-free mode) still returns LINKEDIN_FEATURE_NOT_SUBSCRIBED, exit 5, on an account with no
LinkedIn job-posting subscription. On that error nothing goes public and the draft stays a draft.
Expect exit 5 unless you have confirmed the subscription; do not read it as a malformed request.publish and close are wired, never live-fired. Every test account run against this surface
hit the subscription gate above before a posting ever went public, so a live 200 from either
command has not been observed; close's happy path is unreachable the same way, since nothing gets
published to close. The response shapes are cross-checked against the substrate's own types rather
than an observed call. The read and draft surface above publish (list/get/budget/create/update,
plus the three applicant reads) does not depend on that subscription and is proven.job update returning exit 0 was applied,
but its own response and an immediate job get can both still show the old value, while
job list (the owner view, checked minutes later) shows the update did land. Do not conclude a
silent no-op from a stale-looking immediate read.job list --state filters client-side and says so on stderr. LinkedIn's own state filter is
best-effort, so the CLI re-fetches the unfiltered page walk and drops non-matching items itself,
logging what it dropped. Read stdout for data and stderr for what was dropped, and note that
--all may walk far more upstream pages than the filtered item count suggests.job close is irreversible once the posting is listed. Preview it, and be sure.job budget <id> costs nothing and is the only way to know what a
promoted publish will spend.curviate job create --job-title "…" --company "…" --workplace-type REMOTE \
--location <loc_id> --employment-status FULL_TIME --description "$(cat jd.md)" \
--apply-method linkedin --notification-email <email> --account <acc_id> --preview --json
# re-run without --preview to create the draft, then:
curviate job get <id> --account <acc_id> --json # confirm the draft
curviate job budget <id> --account <acc_id> --json # price it
curviate job publish <id> --mode FREE --account <acc_id> --preview --json<!-- 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.
| Command | Arguments | Flags |
|---|---|---|
curviate job get | ID | (none) |
curviate job list | (none) | --limit, --cursor, --all, --max-pages, --page-delay, --state (required) |
curviate job create | (none) | --job-title, --job-title-id, --company, --company-id, --workplace-type, --location, --employment-status, --description, --apply-method, --notification-email, --website-url, --skills |
curviate job update | ID | --job-title, --job-title-id, --company, --company-id, --workplace-type, --location, --employment-status, --description, --apply-method, --notification-email, --website-url, --skills |
curviate job budget | ID | (none) |
curviate job publish | ID | --mode (required), --budget-currency, --budget-amount, --budget-scope |
curviate job close | ID | (none) |
curviate job applicants | ID | --limit, --cursor, --all, --max-pages, --page-delay, --ratings |
curviate job applicant get | ID APPLICANTID | (none) |
curviate job applicant resume | ID APPLICANTID | -o, --output |
<!-- /generated -->
| Code | Meaning | What to do |
|---|---|---|
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. |
2 | Usage or invalid input, often raised before any network call: a missing required flag, a description under 200 characters, a location passed as a name rather than an id. | Fix the invocation. Never retry unchanged. |
4 | Not found: the posting does not exist, or is not yours. | Re-check the id and the acting account. |
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. |
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. On a named budgetRow, switch to other work on the account rather than backing off across the board. |
7 | Transient platform fault: 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. |
11 | Billing: payment, a cancelled seat, or a subscription lock. SUBSCRIPTION_BUSY is retry-likely; check the envelope. | Resolve it in the dashboard. |
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 <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
Just SKILL.md in cli-tool/components/skills/curviate/curviate-jobs of davila7/claude-code-templates.
Open the folder on GitHubat commit c0ca7da
Curviate Jobs 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Curviate Jobs this skilldavila7/claude-code-templates | 33k | — | ~2.7k | Automated safety check: Pass | MIT | |
| Outreachandrew-shwetzer/career-ops-plugin-do-not-fork-currently-updating-v2- | 502 | — | ~939 | Automated safety check: Pass | MIT | |
| Company Hiring Intelligencetinyfish-io/tinyfish-cookbook | 2.2k | — | ~3.6k | Automated safety check: Pass | MIT | |
| Linkedin Job Post To Buyer Pain MapVarnan-Tech/opendirectory | 674 | — | ~3.4k | Automated safety check: Notes | MIT | |
| Sourcing Outreachshawnpang/startup-founder-skills | 343 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Job Application Managerreactive-resume/reactive-resume | 44k | — | ~13k | Automated safety check: Pass | MIT |
andrew-shwetzer/career-ops-plugin-do-not-fork-currently-updating-v2-
Draft personalized outreach messages for LinkedIn connections, hiring managers, or recruiters.
tinyfish-io/tinyfish-cookbook
Reverse-engineer what a company is building by scraping their job postings, careers page, LinkedIn Jobs, and engineering blog using TinyFish web agents.
Varnan-Tech/opendirectory
Takes pasted LinkedIn job posts or hiring descriptions and converts them into a structured buyer pain map with inferred pains, capability gaps, buy-vs-build signal, account priority scores, and…
shawnpang/startup-founder-skills
When the user needs to write recruiting outreach messages to attract passive candidates or request referrals.
reactive-resume/reactive-resume
Runs the job-search pipeline. An agent skill from reactive-resume/reactive-resume.
yanliudesign/job-description-skill
Job Description 解码器 + Offer 策略系统。把任何 JD 翻译成「这家公司到底在招什么人 / 我的匹配度 / Gap 在哪 / 为什么投/不投 / 面试会问什么 / 下一步怎么走」。只有 3 步:贴 JD → 给简历 → 自动生成并打开一份 HTML Offer Strategy Report。是整个求职链路的入口,向下衔接 Resume Skill 和 BQ…
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.
davila7/claude-code-templates
Analyzes Neuropixels recordings from SpikeGLX or Open Ephys through preprocessing, drift correction, Kilosort4 spike sorting, quality metrics and curation.
davila7/claude-code-templates
Supplies LaTeX templates and formatting rules for journals, conferences, posters, and grant proposals, then can check a draft against them.
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.
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.
davila7/claude-code-templates
Senior FDA consultant and specialist for medical device companies including HIPAA compliance and requirement management.
Works with
Categories
Create, publish and manage classic LinkedIn job postings with the Curviate CLI, and read their applicants. Curviate Jobs is an agent skill from davila7/claude-code-templates. Create, publish and manage classic LinkedIn job postings with the Curviate CLI, and read their applicants.
Curviate Jobs fits situations like: updating a posting; pulling applicants and résumés.
Run `npx skills add davila7/claude-code-templates --skill curviate-jobs -a claude-code`. Or copy the skill folder (cli-tool/components/skills/curviate/curviate-jobs in davila7/claude-code-templates) into .claude/skills/curviate-jobs in your project. Claude Code loads it when a task matches its description.
Run `npx skills add davila7/claude-code-templates --skill curviate-jobs -a codex`. Or copy the skill folder (cli-tool/components/skills/curviate/curviate-jobs in davila7/claude-code-templates) into .agents/skills/curviate-jobs in your project. Codex loads it when a task matches its description.
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-jobs -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-jobs, .gemini/skills/curviate-jobs, .github/skills/curviate-jobs and .opencode/skills/curviate-jobs in your project.
Going by SKILL.md and its folder, Curviate Jobs 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.
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.
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.
Curviate Jobs is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Curviate Jobs: Outreach (andrew-shwetzer/career-ops-plugin-do-not-fork-currently-updating-v2-, 502 stars), Company Hiring Intelligence (tinyfish-io/tinyfish-cookbook, 2.2k stars), Linkedin Job Post To Buyer Pain Map (Varnan-Tech/opendirectory, 674 stars) and Sourcing Outreach (shawnpang/startup-founder-skills, 343 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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.