计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
linkedin【效率与协作】General-purpose LinkedIn automation – fetch profiles, search people and companies, send messages, manage connections, create posts, and more. Use when the user wants to interact with LinkedIn.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
You have access to linkedin – a CLI tool for LinkedIn automation. Use it to fetch profiles, search people and companies, send messages, manage connections, create posts, react, comment, and more.
Each command sends a request to Linked API, which runs a real cloud browser to perform the action on LinkedIn. Operations are not instant – expect 30 seconds to several minutes depending on complexity.
If linkedin is not available, install it:
npm install -g @linkedapi/linkedin-cli
If a command fails with exit code 2 (authentication error), ask the user to set up their account:
Once the user provides the tokens, run:
linkedin setup --linked-api-token=TOKEN --identification-token=TOKEN
Always use --json and -q for machine-readable output:
LINKEDAPI_CLIENT=skill:linkedin linkedin <command> --json -q
When using this skill, run every linkedin ... example below with the
LINKEDAPI_CLIENT=skill:linkedin prefix so Linked API can attribute usage to the skill.
| Flag | Description |
|---|---|
--json | Structured JSON output |
--quiet / -q | Suppress stderr progress messages |
--fields name,url,... | Select specific fields in output |
--no-color | Disable colors |
--account "Name" | Use a specific account for this command |
Read the detailed procedure and examples when working on this part of the task.
Read the detailed procedure and examples when working on this part of the task.
linkedin person search [flags] --json -q
| Flag | Description |
|---|---|
--term | Search keyword or phrase |
--limit | Max results |
--first-name | Filter by first name |
--last-name | Filter by last name |
--position | Filter by job position |
--locations | Comma-separated locations |
--industries | Comma-separated industries |
--current-companies | Comma-separated current company names |
--previous-companies | Comma-separated previous company names |
--schools | Comma-separated school names |
linkedin person search --term "product manager" --locations "San Francisco" --json -q
linkedin person search --current-companies "Google" --position "Engineer" --limit 20 --json -q
Read the detailed procedure and examples when working on this part of the task.
linkedin company search [flags] --json -q
| Flag | Description |
|---|---|
--term | Search keyword |
--limit | Max results |
--sizes | Comma-separated sizes: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+ |
--locations | Comma-separated locations |
--industries | Comma-separated industries |
linkedin company search --term "fintech" --sizes "11-50,51-200" --json -q
linkedin message send <person-url> '<text>' --json -q
Text up to 1900 characters. Wrap the message in single quotes to avoid shell interpretation issues.
linkedin message send https://www.linkedin.com/in/username 'Hey, loved your latest post!' --json -q
linkedin message get <person-url> [--since TIMESTAMP] --json -q
The first call for a conversation triggers a background sync and may take longer. Subsequent calls are faster.
linkedin message get https://www.linkedin.com/in/username --json -q
linkedin message get https://www.linkedin.com/in/username --since 2024-01-15T10:30:00Z --json -q
linkedin connection status <url> --json -q
linkedin connection send <url> [--note 'text'] [--email user@example.com] --json -q
linkedin connection list [flags] --json -q
| Flag | Description |
|---|---|
--limit | Max connections to return |
--since | Only connections made since ISO timestamp (only works when no filter flags are used) |
--first-name | Filter by first name |
--last-name | Filter by last name |
--position | Filter by job position |
--locations | Comma-separated locations |
--industries | Comma-separated industries |
--current-companies | Comma-separated current company names |
--previous-companies | Comma-separated previous company names |
--schools | Comma-separated school names |
linkedin connection list --limit 50 --json -q
linkedin connection list --current-companies "Google" --position "Engineer" --json -q
linkedin connection list --since 2024-01-01T00:00:00Z --json -q
linkedin connection pending --json -q
Invitations that others have sent to you (received requests).
linkedin connection requests --json -q
linkedin connection accept <url> --json -q
linkedin connection ignore <url> --json -q
linkedin connection withdraw <url> [--no-unfollow] --json -q
By default, withdrawing also unfollows the person. Use --no-unfollow to keep following.
linkedin connection remove <url> --json -q
linkedin post fetch <url> [flags] --json -q
| Flag | Description |
|---|---|
--comments | Include comments |
--reactions | Include reactions |
--comments-limit | Max comments to retrieve (requires --comments) |
--comments-sort | Sort order: mostRelevant or mostRecent (requires --comments) |
--comments-replies | Include replies to comments (requires --comments) |
--reactions-limit | Max reactions to retrieve (requires --reactions) |
linkedin post fetch https://www.linkedin.com/posts/username_activity-123 --json -q
# With comments sorted by most recent, including replies
linkedin post fetch https://www.linkedin.com/posts/username_activity-123 \
--comments --comments-sort mostRecent --comments-replies --json -q
linkedin post create '<text>' [flags] --json -q
| Flag | Description |
|---|---|
--company-url | Post on behalf of a company page (requires admin access) |
--attachments | Attachment as url:type or url:type:name. Types: image, video, document. Can be specified multiple times. |
--mention | Mention as key:name or key:name:identifier, bound to @[key] in the text. Can be specified multiple times. |
Attachment limits: up to 9 images, or 1 video, or 1 document. Cannot mix types.
linkedin post create 'Excited to share our latest update!' --json -q
# With a document
linkedin post create 'Our Q4 report' \
--attachments "https://example.com/report.pdf:document:Q4 Report" --json -q
# Mentioning a person
linkedin post create 'Huge thanks to @[author] for the write-up!' \
--mention "author:Example Person:urn:li:member:123456789" --json -q
# Post as a company
linkedin post create 'Company announcement' \
--company-url https://www.linkedin.com/company/name --json -q
linkedin post repost <url> [flags] --json -q
| Flag | Description |
|---|---|
--text | Your own commentary (up to 3000 characters). Without it the post is reposted as is. |
--mention | Mention as key:name or key:name:identifier, bound to @[key] in --text. Can be specified multiple times. |
The repost's own postUrl and postUrn come back, not those of the post you reposted. Reposting the same post twice from the same account fails with alreadyReposted.
linkedin post repost https://www.linkedin.com/posts/username_activity-123 --json -q
# With commentary
linkedin post repost urn:li:activity:1234567890123456789 \
--text 'Worth reading, especially the part on onboarding.' --json -q
linkedin post react <url> --type <reaction> [--company-url <url>] --json -q
Reaction types: like, love, support, celebrate, insightful, funny.
linkedin post react https://www.linkedin.com/posts/username_activity-123 --type like --json -q
# React on behalf of a company
linkedin post react https://www.linkedin.com/posts/username_activity-123 --type celebrate \
--company-url https://www.linkedin.com/company/name --json -q
linkedin post comment <url> '<text>' [--company-url <url>] --json -q
Text up to 1000 characters.
linkedin post comment https://www.linkedin.com/posts/username_activity-123 'Great insights!' --json -q
# Comment on behalf of a company
linkedin post comment https://www.linkedin.com/posts/username_activity-123 'Well said!' \
--company-url https://www.linkedin.com/company/name --json -q
# Social Selling Index
linkedin stats ssi --json -q
# Performance analytics (profile views, post impressions, search appearances)
linkedin stats performance --json -q
# API usage for a date range
linkedin stats usage --start 2024-01-01T00:00:00Z --end 2024-01-31T00:00:00Z --json -q
# Who viewed your profile
linkedin stats viewers --limit 50 --json -q
# Only views since a moment
linkedin stats viewers --since 2026-08-01T00:00:00Z --json -q
Each viewer is either identified — carrying name, publicUrl and urn (a member URN, null
when LinkedIn does not expose it) — or anonymous, carrying only the description LinkedIn showed
and a searchUrl you can pass to linkedin person search --url to look for them. Viewers come
newest first, and viewedAt is an estimate derived from the relative age LinkedIn displays.
Requires a LinkedIn Sales Navigator subscription. Uses hashed URLs for person/company lookups.
linkedin navigator person fetch <hashed-url> --json -q
linkedin navigator person search [flags] --json -q
| Flag | Description |
|---|---|
--term | Search keyword or phrase |
--limit | Max results |
--first-name | Filter by first name |
--last-name | Filter by last name |
--position | Filter by job position |
--locations | Comma-separated locations |
--industries | Comma-separated industries |
--current-companies | Comma-separated current company names |
--previous-companies | Comma-separated previous company names |
--schools | Comma-separated school names |
--years-of-experience | Comma-separated ranges: lessThanOne, oneToTwo, threeToFive, sixToTen, moreThanTen |
linkedin navigator person search --term "VP Marketing" --locations "United States" --json -q
linkedin navigator person search --years-of-experience "moreThanTen" --position "CEO" --json -q
Read the detailed procedure and examples when working on this part of the task.
linkedin navigator company search [flags] --json -q
| Flag | Description |
|---|---|
--term | Search keyword |
--limit | Max results |
--sizes | Comma-separated sizes: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+ |
--locations | Comma-separated locations |
--industries | Comma-separated industries |
--revenue-min | Min annual revenue in M USD: 0, 0.5, 1, 2.5, 5, 10, 20, 50, 100, 500, 1000 |
--revenue-max | Max annual revenue in M USD: 0.5, 1, 2.5, 5, 10, 20, 50, 100, 500, 1000, 1000+ |
linkedin navigator company search --term "fintech" --sizes "11-50,51-200" --json -q
linkedin navigator company search --revenue-min 10 --revenue-max 100 --locations "United States" --json -q
linkedin navigator message send <person-url> '<text>' --subject '<subject>' --json -q
Text up to 1900 characters. Subject up to 80 characters.
linkedin navigator message send https://www.linkedin.com/in/username \
'Would love to chat about API integrations' --subject 'Partnership Opportunity' --json -q
linkedin navigator message get <person-url> [--since TIMESTAMP] --json -q
Execute a custom workflow definition from a file, stdin, or inline:
# From file
linkedin workflow run --file workflow.json --json -q
# From stdin
cat workflow.json | linkedin workflow run --json -q
# Inline
echo '{"actions":[...]}' | linkedin workflow run --json -q
Check workflow status or wait for completion:
linkedin workflow status <id> --json -q
linkedin workflow status <id> --wait --json -q
See Building Workflows for the workflow JSON schema.
linkedin account list # List accounts (* = active)
linkedin account switch "Name" # Switch active account
linkedin account rename "Name" --name "New Name" # Rename account
linkedin reset # Remove active account
linkedin reset --all # Remove all accounts
limitExceeded error means the limit was reached.https://www.linkedin.com/... format without trailing slashes.null or [], not omitted.