{"id":"834e03ba-d00d-4182-8eab-983b9f42079b","entityType":"agent","slug":"clawhub-jwestburg-linear-native-node","name":"linear-native-node","canonicalUrl":"https://www.xpersona.co/agent/clawhub-jwestburg-linear-native-node","canonicalPath":"/agent/clawhub-jwestburg-linear-native-node","generatedAt":"2026-10-10T07:45:02.915Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T03:53:15.813Z","emptyReason":null},"description":"Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Write actions are explicit and approval-gated via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party intermediary/proxy service. Skill: linear-native-node Owner: jwestburg Summary: Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Write actions are explicit and approval-gated via create/comment/status/priority/project-create commands. Reads LINEAR_API_","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.7K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s177the448m6rk54wz8gse0jnd8587yq:linear-native-node","sourceUrl":"https://clawhub.ai/jwestburg/linear-native-node","homepage":"https://clawhub.ai/jwestburg/skills/linear-native-node","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/jwestburg/linear-native-node","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/jwestburg/skills/linear-native-node","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":65,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear i"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T03:53:15.813Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T03:53:15.813Z","emptyReason":null},"stars":null,"forks":null,"downloads":1712,"packageName":null,"latestVersion":"1.0.22","tractionLabel":"1.7K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T03:53:15.813Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T03:53:15.813Z","lastCrawledAt":"2026-10-10T03:53:15.813Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T03:53:15.813Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.22","createdAt":"2026-09-11T02:26:57.033Z","changelog":"Public candidate v1.0.22: reviewed Linear native Node helper with read commands, explicit write gate, bounded inputs, public package hygiene, and local tests.","fileCount":4,"zipByteSize":12688},{"version":"1.0.20","createdAt":"2026-07-07T00:37:07.758Z","changelog":"Polish Linear public-ready source: approval-gated write wording, prefix-only global flags, workspace-sensitive error-body omission, and public package hygiene excluding dry-runs evidence.","fileCount":4,"zipByteSize":12610},{"version":"1.0.15","createdAt":"2026-06-14T22:43:32.562Z","changelog":"ClawHub publication/version refresh after public-readiness review; no runtime behavior change.","fileCount":4,"zipByteSize":11926},{"version":"1.0.14","createdAt":"2026-06-02T05:01:20.497Z","changelog":"Reject extra positional args for Linear commands to prevent truncated operator intent","fileCount":4,"zipByteSize":11781},{"version":"1.0.13","createdAt":"2026-06-02T03:56:59.051Z","changelog":"Public-ready safety/docs/test update","fileCount":4,"zipByteSize":11852},{"version":"1.0.12","createdAt":"2026-05-30T19:26:36.183Z","changelog":"Clarify execute approval gate and mutation appropriateness requirements.","fileCount":4,"zipByteSize":11273},{"version":"1.0.11","createdAt":"2026-05-26T02:21:33.061Z","changelog":"Tighten public docs for Linear key permissions, team/default-team behavior, write approval wording, pagination/rate-limit behavior, help support, sample-output scanability, and consistent --limit validation.","fileCount":4,"zipByteSize":11360},{"version":"1.0.9","createdAt":"2026-05-14T15:54:48.317Z","changelog":"Security/audit polish: document the write-command approval gate and expected static-analysis warning for env-var plus fixed Linear endpoint usage. No functional API behavior change.","fileCount":3,"zipByteSize":8770}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s177the448m6rk54wz8gse0jnd8587yq:linear-native-node","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jwestburg-linear-native-node/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jwestburg-linear-native-node/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jwestburg-linear-native-node/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-jwestburg-linear-native-node/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-jwestburg-linear-native-node/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-jwestburg-linear-native-node/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T07:45:02.911Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jwestburg-linear-native-node/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jwestburg-linear-native-node/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jwestburg-linear-native-node/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jwestburg-linear-native-node/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T03:53:15.813Z","emptyReason":null},"readme":"Skill: linear-native-node\n\nOwner: jwestburg\n\nSummary: Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Write actions are explicit and approval-gated via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party intermediary/proxy service.\n\nTags: graphql:1.0.20, latest:1.0.22, linear:1.0.20, node:1.0.20, productivity:1.0.20, project-management:1.0.20\n\nVersion history:\n\nv1.0.22 | 2026-09-11T02:26:57.033Z | user\n\nPublic candidate v1.0.22: reviewed Linear native Node helper with read commands, explicit write gate, bounded inputs, public package hygiene, and local tests.\n\nv1.0.20 | 2026-07-07T00:37:07.758Z | user\n\nPolish Linear public-ready source: approval-gated write wording, prefix-only global flags, workspace-sensitive error-body omission, and public package hygiene excluding dry-runs evidence.\n\nv1.0.15 | 2026-06-14T22:43:32.562Z | user\n\nClawHub publication/version refresh after public-readiness review; no runtime behavior change.\n\nv1.0.14 | 2026-06-02T05:01:20.497Z | user\n\nReject extra positional args for Linear commands to prevent truncated operator intent\n\nv1.0.13 | 2026-06-02T03:56:59.051Z | user\n\nPublic-ready safety/docs/test update\n\nv1.0.12 | 2026-05-30T19:26:36.183Z | user\n\nClarify execute approval gate and mutation appropriateness requirements.\n\nv1.0.11 | 2026-05-26T02:21:33.061Z | user\n\nTighten public docs for Linear key permissions, team/default-team behavior, write approval wording, pagination/rate-limit behavior, help support, sample-output scanability, and consistent --limit validation.\n\nv1.0.9 | 2026-05-14T15:54:48.317Z | user\n\nSecurity/audit polish: document the write-command approval gate and expected static-analysis warning for env-var plus fixed Linear endpoint usage. No functional API behavior change.\n\nv1.0.8 | 2026-05-08T15:42:22.932Z | user\n\nAdd fail-closed --execute gate for Linear write commands and align setup examples.\n\nv1.0.7 | 2026-05-07T14:41:45.074Z | user\n\nPackage metadata cleanup: restore display name and tags after v1.0.6 package-only release.\n\nv1.0.6 | 2026-05-07T14:32:56.301Z | user\n\nPackage-only cleanup: publish runtime files only and remove the local test harness from the public archive; keeps the v1.0.5 GraphQL query fix.\n\nv1.0.5 | 2026-05-07T14:30:33.707Z | user\n\nFix GraphQL variable construction in issue list queries (issues/my-issues/my-todos/urgent/standup) that broke in 1.0.4.\n\nv1.0.4 | 2026-05-06T00:45:04.815Z | user\n\nCorrective package-only release: removes test harness from the published archive; keeps reviewed v1.0.3 code/docs behavior with only SKILL.md and scripts/linear.mjs.\n\nv1.0.3 | 2026-05-06T00:43:41.730Z | user\n\nCorrective release: publishes the final reviewed source package with clean examples, PowerShell-safe setup text, env-only credentials, and ASCII-clean docs/scripts.\n\nv1.0.2 | 2026-05-06T00:42:38.696Z | user\n\nPublic polish: env-only credentials, ASCII-clean docs and examples, scanner-warning clarity, and package consistency checks.\n\nv1.0.1 | 2026-05-06T00:15:07.219Z | user\n\nScanner cleanup: remove ~/.openclaw/.env file-reading fallback from public package; credentials are read from process environment only.\n\nv1.0.0 | 2026-05-05T23:53:21.401Z | user\n\nInitial public release: native Node.js Linear GraphQL helper with read commands and approval-gated write commands.\n\nArchive index:\n\nArchive v1.0.22: 4 files, 12688 bytes\n\nFiles: scripts/linear.mjs (22698b), skill-card.md (2265b), SKILL.md (13731b), _meta.json (138b)\n\nFile v1.0.22:SKILL.md\n\n---\nname: linear-native-node\ndescription: Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Write actions are explicit and approval-gated via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party intermediary/proxy service.\nversion: 1.0.22\nrisk_class: external-api-read-write-gated\n---\n\n# Linear Native Node\n\nVersion: 1.0.22 / local Linear utility.\n\n\nUse `scripts/linear.mjs` to talk directly to Linear's GraphQL API at `https://api.linear.app/graphql`.\n\nNative Node 18+. Zero npm dependencies. Windows, macOS, and Linux friendly. No bash, Python, OAuth gateway, browser login, or third-party proxy.\n\n## Security behavior\n\n- Reads `LINEAR_API_KEY` and optional `LINEAR_DEFAULT_TEAM` from the process environment only.\n- Does not read credential files or `~/.openclaw/.env`.\n- Sends GraphQL requests only to `https://api.linear.app/graphql`.\n- Does not write local files, log secrets, or print the API key.\n- Linear personal API keys inherit the permissions of the user/account that created them. Treat output as workspace-sensitive; use the least-privileged key model Linear offers if scoped keys become available.\n- Read-only commands are the default usage pattern.\n- Write commands are explicit commands (`create`, `comment`, `status`, `priority`, `project-create`) and are fail-closed by default: the script exits unless `--execute` is present after explicit user approval for that specific Linear mutation.\n- `--execute` is only a script-level flag gate. Mutation appropriateness is enforced by the operator/agent approval policy: do not run a write unless the current user instruction or approval names the Linear action, target, and intended mutation.\n- Static-analysis note: env-var + network-send warnings are expected for this skill because it uses a named API key to call Linear's fixed GraphQL endpoint. Treat any broad env enumeration, dynamic endpoint, or key-printing behavior as a blocker.\n- Read command output may include workspace names, user names, emails, issue titles, issue descriptions, and URLs from the connected Linear workspace. Redact that content before sharing logs or examples externally.\n\n\n## Why this skill\n\nThis is the local/native Node version of common Linear helper workflows:\n\n- Keeps API access between this machine and Linear only.\n- Uses `LINEAR_API_KEY` from the process environment only; never print the key.\n- Avoids bash-oriented helpers that break on Windows.\n- Avoids third-party OAuth/gateway tools or intermediary services.\n- Keeps a tight auditable scope: viewer/org/team lookup, issue list/read/create/update/comment, practical personal summaries, and branch names.\n\n## Setup\n\nCreate a Linear API key at:\n\n```text\nhttps://linear.app/settings/api\n```\n\nPowerShell session-only setup:\n\n```powershell\n$env:LINEAR_API_KEY = \"<your-linear-key>\"\n$env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n```\n\nmacOS/Linux shell session-only setup:\n\n```bash\nexport LINEAR_API_KEY=\"<your-linear-key>\"\nexport LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n`LINEAR_DEFAULT_TEAM` is optional. Examples below use `TEAM` and `TEAM-123` as placeholders; replace them with your Linear team key and issue identifiers.\n\n## Run\n\nFrom PowerShell, bash, zsh, or any shell with Node on PATH:\n\n```bash\nnode \"<skill-dir>/scripts/linear.mjs\" help\nnode \"<skill-dir>/scripts/linear.mjs\" viewer\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --limit 10\n```\n\nFrom OpenClaw, use the bundled script directly:\n\n```text\nRun: node <skill-dir>/scripts/linear.mjs my-issues --team TEAM\nRun only after explicit approval: node <skill-dir>/scripts/linear.mjs --execute create TEAM \"Fix login error\" \"Users see an error after submitting credentials.\" --priority high\n```\n\nAdd `--json` before the command when structured output is useful. Global flags (`--json`, `--execute`) are intentionally prefix-only; put them before the command so positional text such as a comment body of `--execute` or `--json` is not consumed as a global flag.\n\n## Commands\n\nRead-only:\n\n```text\nhelp\nviewer\norganization\nteams\nprojects [--team TEAM] [--limit N]\nstates <TEAM_KEY>\nissues [--team TEAM] [--mine] [--state STATE] [--limit N]\nmy-issues [--team TEAM] [--state STATE] [--limit N]\nmy-todos [--team TEAM] [--limit N]\nurgent [--team TEAM] [--mine] [--limit N]\nstandup [--team TEAM] [--limit N]\nissue <IDENTIFIER>\nbranch <IDENTIFIER>\n```\n\nFor list commands, `--team TEAM` narrows results to one team. If `--team` is omitted and `LINEAR_DEFAULT_TEAM` is set, that default is used where supported. If neither is set, list commands that support broad lookup query across the accessible workspace scope instead of failing. `states <TEAM_KEY>` always requires a team key.\n\nWrites to Linear require explicit approval and `--execute`:\n\n```text\n--execute project-create [TEAM_KEY] \"Name\" [\"Description\"]\n--execute create [TEAM_KEY] \"Title\" [\"Description\"] [--priority urgent|high|medium|low|none]\n--execute comment <IDENTIFIER> \"Comment\"\n--execute status <IDENTIFIER> <state-name>\n--execute priority <IDENTIFIER> <urgent|high|medium|low|none>\n```\n\nFor `project-create` and `create`, `TEAM_KEY` may be omitted only when `LINEAR_DEFAULT_TEAM` is set; with two or more positional args, the first arg is treated as the explicit team key. Without prefix `--execute`, write commands fail before contacting Linear.\n\nFor agent use, execute write commands only when the user's current instruction explicitly names the Linear action, target, and intended mutation (for example, \"create a Linear issue for...\" or \"move TEAM-123 to Done\") or the user explicitly approves the exact command.\n\n## Examples\n\nList teams, projects, and states:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" teams\nnode \"<skill-dir>/scripts/linear.mjs\" projects --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" states TEAM\n```\n\nCreate a project:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" --execute project-create TEAM \"Release Planning\" \"Track launch scope and milestones.\"\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" --execute project-create \"Release Planning\"\n```\n\nList issues:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --state \"In Progress\"\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" my-todos --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" urgent --team TEAM\n```\n\nRead and update an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issue TEAM-123\nnode \"<skill-dir>/scripts/linear.mjs\" --execute comment TEAM-123 \"Added reproduction notes.\"\nnode \"<skill-dir>/scripts/linear.mjs\" --execute status TEAM-123 \"In Progress\"\nnode \"<skill-dir>/scripts/linear.mjs\" --execute priority TEAM-123 urgent\n```\n\nCreate an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" --execute create TEAM \"Fix notification delivery\" \"Notifications are delayed for some users.\" --priority high\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" --execute create \"Fix notification delivery\" --priority high\n```\n\nGenerate a GitHub-friendly branch name from the Linear issue title:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" branch TEAM-123\n```\n\nGet machine-readable output:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" --json my-issues --team TEAM\n```\n\n## Notes\n\n- Prefer issue identifiers like `TEAM-123`; the script resolves them before updates that need Linear IDs.\n- Priority values map to Linear's native values: `urgent`, `high`, `medium`, `low`, `none`.\n- Missing keys, 401/403 responses, proxy/egress denial hints, GraphQL errors, missing teams/states, and invalid priorities produce clear stderr errors with non-zero exit codes.\n- When omitting `TEAM_KEY` via `LINEAR_DEFAULT_TEAM`, pass only the project name or issue title. Descriptions require an explicit `TEAM_KEY` because two positional arguments are parsed as `TEAM_KEY` plus name/title.\n- List commands default to `--limit 25`; `standup` defaults to `--limit 20`. Limits must be integers from 1-100. The script returns the first page ordered by Linear `updatedAt`; it does not auto-paginate.\n- Linear HTTP and GraphQL errors surface as clear stderr errors with non-zero exit codes, but response bodies/details are omitted because they may contain workspace-sensitive data; the script does not retry or back off. For 401/403, verify both Linear key permissions and whether an egress proxy/sandbox is blocking `api.linear.app`.\n- `standup` summarizes assigned issues in started and completed Linear workflow states within the returned first page; it is intentionally lightweight, not a time tracker or date-windowed report.\n- Help is available with `help`, `-h`, or `--help`. There is no `--version` flag; use the `version:` frontmatter and changelog.\n\n## Sample output\n\nSanitized representative output for eval/review checks:\n\n### Example success output\n\n```text\n$ node scripts/linear.mjs viewer\nExample User <user@example.com>\n\n$ node scripts/linear.mjs my-issues --team TEAM --limit 2\nTEAM-123 [In Progress/high] @Example User - Fix notification delivery\nTEAM-124 [Todo/medium] @Example User - Draft release checklist\n```\n\n### Example error output\n\n```text\n$ node scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submit.\"\nerror: write command \"create\" is blocked by default. Re-run with --execute only after explicit approval.\n\n$ node scripts/linear.mjs viewer\nerror: LINEAR_API_KEY is not set.\nCreate a Linear API key at: https://linear.app/settings/api\nThen add it for this shell session:\n  PowerShell: $env:LINEAR_API_KEY = \"<your-linear-key>\"\n  bash/zsh:    export LINEAR_API_KEY=\"<your-linear-key>\"\nOptional default team:\n  PowerShell: $env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n  bash/zsh:    export LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n\n## Changelog\n\n- `1.0.22`: Frontmatter wording hygiene: clarify that the skill has no third-party intermediary/proxy service while still calling Linear's own GraphQL API directly. No runtime Linear behavior change and no ClawHub/public publish authority.\n- `1.0.21`: Test/source-review hygiene: construct the fake Linear API key sentinel in `tests.mjs` instead of embedding a credential-looking literal, so source-attached review packaging can scan the test harness without weakening secret gates. No runtime Linear behavior change and no ClawHub/public publish authority.\n- `1.0.20`: Public-clear packaging polish: exclude `dry-runs/` review evidence from ClawHub packages, move current dry-run evidence out of the skill source tree, and extend package leak tests to scan expected packaged files for Windows path variants and review/evidence inventory markers. No categories, topics, topic tags, tags, keywords, or ClawHub catalog metadata added to source.\n- `1.0.19`: Source polish: remove remaining direct/direct wording, make global flags prefix-only so positional text equal to `--execute`/`--json` is not consumed as a global flag, omit workspace-sensitive Linear response bodies/details from non-auth HTTP/GraphQL errors, and clarify write/JSON examples. No categories, topics, topic tags, tags, keywords, or ClawHub catalog metadata added to source.\n- `1.0.18`: Metadata wording hygiene: remove \"Direct\" from the description; no runtime behavior change.\n- `1.0.17`: Superseded local listing-topic experiment removed before final retest; no runtime behavior change.\n- `1.0.16`: Public-wording hygiene patch: remove ambiguous current publishability/public-readiness language from the body/changelog so source text cannot be mistaken for standing ClawHub/public approval; no runtime behavior change.\n- `1.0.15`: Version refresh after prior packaging/public-readiness review; no runtime behavior change and no standing publish approval implied.\n- `1.0.14`: Reject extra positional arguments for single/two-argument commands, including write commands, to prevent truncated operator intent.\n- `1.0.13`: Add cross-platform missing-key hints, clarify 401/403 proxy-vs-auth diagnostics, guard mutually exclusive state filters, and expand offline gate tests.\n- `1.0.12`: Clarify that `--execute` is a script-level flag gate while mutation appropriateness remains an operator/agent approval-policy requirement.\n- `1.0.11`: Tighten public docs for Linear key permissions, team/default-team behavior, write approval wording, pagination/rate-limit behavior, help support, sample-output scanability, and consistent `--limit` validation.\n- `1.0.10`: Add sanitized sample outputs for eval review, rename the write-gate helper for clearer fail-closed call sites, and keep local test harness excluded from ClawHub packages.\n- `1.0.9`: Security/audit polish: document the write-command approval gate and expected static-analysis warning for env-var + fixed Linear endpoint usage. No functional API behavior change.\n- `1.0.8`: Add fail-closed `--execute` gate for Linear write commands and align setup examples.\n- `1.0.7`: Package metadata cleanup: restore display name and tags after package-only cleanup.\n- `1.0.6`: Package-only cleanup: publish runtime files plus packaging metadata (`SKILL.md`, `.clawhubignore`, and `scripts/linear.mjs`) and keep the local test harness out of the public archive.\n- `1.0.5`: Fix GraphQL variable construction in issue list queries (`issues`, `my-issues`, `my-todos`, `urgent`, `standup`) so only actually used variables are declared and passed.\n\nChangelog tracked here from `1.0.5` onward.\n\nFile v1.0.22:_meta.json\n\n{\n  \"ownerId\": \"kn78bc0rnqe8pnvd4azdnjvmmd858m3q\",\n  \"slug\": \"linear-native-node\",\n  \"version\": \"1.0.22\",\n  \"publishedAt\": 1789093617033\n}\n\nFile v1.0.22:skill-card.md\n\n## Description:\n\nLinear Native Node helps agents use Linear's GraphQL API from native Node.js to read workspace data and perform explicitly approved issue, project, comment, status, and priority updates.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[jwestburg](https://clawhub.ai/user/jwestburg)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to query Linear workspace data, summarize assigned work, generate branch names, and perform approved issue or project mutations through the bundled Node script.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill uses a Linear API key whose access follows the connected account's permissions.\n\nMitigation: Use the least-privileged Linear key available and store it only in the process environment for the current session.\n\nRisk: Command output can include workspace-sensitive issue details, URLs, names, or emails.\n\nMitigation: Review and redact Linear output before sharing logs, examples, or summaries externally.\n\nRisk: Approved write commands can mutate Linear issues, comments, priorities, statuses, or projects.\n\nMitigation: Run write commands only when the requested Linear action, target, and intended mutation are explicit, and require the --execute gate.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/jwestburg/skills/linear-native-node)\n- [Linear GraphQL API endpoint](https://api.linear.app/graphql)\n- [Linear API key settings](https://linear.app/settings/api)\n\n## Skill Output:\n\n**Output Type(s):** [Text, JSON, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown guidance with shell commands; runtime output is plain text or JSON.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires LINEAR_API_KEY. Write commands require --execute after explicit approval for the intended Linear mutation.]\n\n## Skill Version(s):\n\n1.0.22 (source: frontmatter and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.20: 4 files, 12610 bytes\n\nFiles: scripts/linear.mjs (22698b), skill-card.md (2670b), SKILL.md (13154b), _meta.json (138b)\n\nFile v1.0.20:SKILL.md\n\n---\nname: linear-native-node\ndescription: Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Write actions are explicit and approval-gated via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party service.\nversion: 1.0.20\nrisk_class: external-api-read-write-gated\n---\n\n# Linear Native Node\n\nVersion: 1.0.20 / local Linear utility.\n\n\nUse `scripts/linear.mjs` to talk directly to Linear's GraphQL API at `https://api.linear.app/graphql`.\n\nNative Node 18+. Zero npm dependencies. Windows, macOS, and Linux friendly. No bash, Python, OAuth gateway, browser login, or third-party proxy.\n\n## Security behavior\n\n- Reads `LINEAR_API_KEY` and optional `LINEAR_DEFAULT_TEAM` from the process environment only.\n- Does not read credential files or `~/.openclaw/.env`.\n- Sends GraphQL requests only to `https://api.linear.app/graphql`.\n- Does not write local files, log secrets, or print the API key.\n- Linear personal API keys inherit the permissions of the user/account that created them. Treat output as workspace-sensitive; use the least-privileged key model Linear offers if scoped keys become available.\n- Read-only commands are the default usage pattern.\n- Write commands are explicit commands (`create`, `comment`, `status`, `priority`, `project-create`) and are fail-closed by default: the script exits unless `--execute` is present after explicit user approval for that specific Linear mutation.\n- `--execute` is only a script-level flag gate. Mutation appropriateness is enforced by the operator/agent approval policy: do not run a write unless the current user instruction or approval names the Linear action, target, and intended mutation.\n- Static-analysis note: env-var + network-send warnings are expected for this skill because it uses a named API key to call Linear's fixed GraphQL endpoint. Treat any broad env enumeration, dynamic endpoint, or key-printing behavior as a blocker.\n- Read command output may include workspace names, user names, emails, issue titles, issue descriptions, and URLs from the connected Linear workspace. Redact that content before sharing logs or examples externally.\n\n\n## Why this skill\n\nThis is the local/native Node version of common Linear helper workflows:\n\n- Keeps API access between this machine and Linear only.\n- Uses `LINEAR_API_KEY` from the process environment only; never print the key.\n- Avoids bash-oriented helpers that break on Windows.\n- Avoids third-party OAuth/gateway tools or intermediary services.\n- Keeps a tight auditable scope: viewer/org/team lookup, issue list/read/create/update/comment, practical personal summaries, and branch names.\n\n## Setup\n\nCreate a Linear API key at:\n\n```text\nhttps://linear.app/settings/api\n```\n\nPowerShell session-only setup:\n\n```powershell\n$env:LINEAR_API_KEY = \"<your-linear-key>\"\n$env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n```\n\nmacOS/Linux shell session-only setup:\n\n```bash\nexport LINEAR_API_KEY=\"<your-linear-key>\"\nexport LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n`LINEAR_DEFAULT_TEAM` is optional. Examples below use `TEAM` and `TEAM-123` as placeholders; replace them with your Linear team key and issue identifiers.\n\n## Run\n\nFrom PowerShell, bash, zsh, or any shell with Node on PATH:\n\n```bash\nnode \"<skill-dir>/scripts/linear.mjs\" help\nnode \"<skill-dir>/scripts/linear.mjs\" viewer\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --limit 10\n```\n\nFrom OpenClaw, use the bundled script directly:\n\n```text\nRun: node <skill-dir>/scripts/linear.mjs my-issues --team TEAM\nRun only after explicit approval: node <skill-dir>/scripts/linear.mjs --execute create TEAM \"Fix login error\" \"Users see an error after submitting credentials.\" --priority high\n```\n\nAdd `--json` before the command when structured output is useful. Global flags (`--json`, `--execute`) are intentionally prefix-only; put them before the command so positional text such as a comment body of `--execute` or `--json` is not consumed as a global flag.\n\n## Commands\n\nRead-only:\n\n```text\nhelp\nviewer\norganization\nteams\nprojects [--team TEAM] [--limit N]\nstates <TEAM_KEY>\nissues [--team TEAM] [--mine] [--state STATE] [--limit N]\nmy-issues [--team TEAM] [--state STATE] [--limit N]\nmy-todos [--team TEAM] [--limit N]\nurgent [--team TEAM] [--mine] [--limit N]\nstandup [--team TEAM] [--limit N]\nissue <IDENTIFIER>\nbranch <IDENTIFIER>\n```\n\nFor list commands, `--team TEAM` narrows results to one team. If `--team` is omitted and `LINEAR_DEFAULT_TEAM` is set, that default is used where supported. If neither is set, list commands that support broad lookup query across the accessible workspace scope instead of failing. `states <TEAM_KEY>` always requires a team key.\n\nWrites to Linear require explicit approval and `--execute`:\n\n```text\n--execute project-create [TEAM_KEY] \"Name\" [\"Description\"]\n--execute create [TEAM_KEY] \"Title\" [\"Description\"] [--priority urgent|high|medium|low|none]\n--execute comment <IDENTIFIER> \"Comment\"\n--execute status <IDENTIFIER> <state-name>\n--execute priority <IDENTIFIER> <urgent|high|medium|low|none>\n```\n\nFor `project-create` and `create`, `TEAM_KEY` may be omitted only when `LINEAR_DEFAULT_TEAM` is set; with two or more positional args, the first arg is treated as the explicit team key. Without prefix `--execute`, write commands fail before contacting Linear.\n\nFor agent use, execute write commands only when the user's current instruction explicitly names the Linear action, target, and intended mutation (for example, \"create a Linear issue for...\" or \"move TEAM-123 to Done\") or the user explicitly approves the exact command.\n\n## Examples\n\nList teams, projects, and states:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" teams\nnode \"<skill-dir>/scripts/linear.mjs\" projects --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" states TEAM\n```\n\nCreate a project:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" --execute project-create TEAM \"Release Planning\" \"Track launch scope and milestones.\"\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" --execute project-create \"Release Planning\"\n```\n\nList issues:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --state \"In Progress\"\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" my-todos --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" urgent --team TEAM\n```\n\nRead and update an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issue TEAM-123\nnode \"<skill-dir>/scripts/linear.mjs\" --execute comment TEAM-123 \"Added reproduction notes.\"\nnode \"<skill-dir>/scripts/linear.mjs\" --execute status TEAM-123 \"In Progress\"\nnode \"<skill-dir>/scripts/linear.mjs\" --execute priority TEAM-123 urgent\n```\n\nCreate an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" --execute create TEAM \"Fix notification delivery\" \"Notifications are delayed for some users.\" --priority high\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" --execute create \"Fix notification delivery\" --priority high\n```\n\nGenerate a GitHub-friendly branch name from the Linear issue title:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" branch TEAM-123\n```\n\nGet machine-readable output:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" --json my-issues --team TEAM\n```\n\n## Notes\n\n- Prefer issue identifiers like `TEAM-123`; the script resolves them before updates that need Linear IDs.\n- Priority values map to Linear's native values: `urgent`, `high`, `medium`, `low`, `none`.\n- Missing keys, 401/403 responses, proxy/egress denial hints, GraphQL errors, missing teams/states, and invalid priorities produce clear stderr errors with non-zero exit codes.\n- When omitting `TEAM_KEY` via `LINEAR_DEFAULT_TEAM`, pass only the project name or issue title. Descriptions require an explicit `TEAM_KEY` because two positional arguments are parsed as `TEAM_KEY` plus name/title.\n- List commands default to `--limit 25`; `standup` defaults to `--limit 20`. Limits must be integers from 1-100. The script returns the first page ordered by Linear `updatedAt`; it does not auto-paginate.\n- Linear HTTP and GraphQL errors surface as clear stderr errors with non-zero exit codes, but response bodies/details are omitted because they may contain workspace-sensitive data; the script does not retry or back off. For 401/403, verify both Linear key permissions and whether an egress proxy/sandbox is blocking `api.linear.app`.\n- `standup` summarizes assigned issues in started and completed Linear workflow states within the returned first page; it is intentionally lightweight, not a time tracker or date-windowed report.\n- Help is available with `help`, `-h`, or `--help`. There is no `--version` flag; use the `version:` frontmatter and changelog.\n\n## Sample output\n\nSanitized representative output for eval/review checks:\n\n### Example success output\n\n```text\n$ node scripts/linear.mjs viewer\nExample User <user@example.com>\n\n$ node scripts/linear.mjs my-issues --team TEAM --limit 2\nTEAM-123 [In Progress/high] @Example User - Fix notification delivery\nTEAM-124 [Todo/medium] @Example User - Draft release checklist\n```\n\n### Example error output\n\n```text\n$ node scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submit.\"\nerror: write command \"create\" is blocked by default. Re-run with --execute only after explicit approval.\n\n$ node scripts/linear.mjs viewer\nerror: LINEAR_API_KEY is not set.\nCreate a Linear API key at: https://linear.app/settings/api\nThen add it for this shell session:\n  PowerShell: $env:LINEAR_API_KEY = \"<your-linear-key>\"\n  bash/zsh:    export LINEAR_API_KEY=\"<your-linear-key>\"\nOptional default team:\n  PowerShell: $env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n  bash/zsh:    export LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n\n## Changelog\n\n- `1.0.20`: Public-clear packaging polish: exclude `dry-runs/` review evidence from ClawHub packages, move current dry-run evidence out of the skill source tree, and extend package leak tests to scan expected packaged files for Windows path variants and review/evidence inventory markers. No categories, topics, topic tags, tags, keywords, or ClawHub catalog metadata added to source.\n- `1.0.19`: Source polish: remove remaining direct/direct wording, make global flags prefix-only so positional text equal to `--execute`/`--json` is not consumed as a global flag, omit workspace-sensitive Linear response bodies/details from non-auth HTTP/GraphQL errors, and clarify write/JSON examples. No categories, topics, topic tags, tags, keywords, or ClawHub catalog metadata added to source.\n- `1.0.18`: Metadata wording hygiene: remove \"Direct\" from the description; no runtime behavior change.\n- `1.0.17`: Superseded local listing-topic experiment removed before final retest; no runtime behavior change.\n- `1.0.16`: Public-wording hygiene patch: remove ambiguous current publishability/public-readiness language from the body/changelog so source text cannot be mistaken for standing ClawHub/public approval; no runtime behavior change.\n- `1.0.15`: Version refresh after prior packaging/public-readiness review; no runtime behavior change and no standing publish approval implied.\n- `1.0.14`: Reject extra positional arguments for single/two-argument commands, including write commands, to prevent truncated operator intent.\n- `1.0.13`: Add cross-platform missing-key hints, clarify 401/403 proxy-vs-auth diagnostics, guard mutually exclusive state filters, and expand offline gate tests.\n- `1.0.12`: Clarify that `--execute` is a script-level flag gate while mutation appropriateness remains an operator/agent approval-policy requirement.\n- `1.0.11`: Tighten public docs for Linear key permissions, team/default-team behavior, write approval wording, pagination/rate-limit behavior, help support, sample-output scanability, and consistent `--limit` validation.\n- `1.0.10`: Add sanitized sample outputs for eval review, rename the write-gate helper for clearer fail-closed call sites, and keep local test harness excluded from ClawHub packages.\n- `1.0.9`: Security/audit polish: document the write-command approval gate and expected static-analysis warning for env-var + fixed Linear endpoint usage. No functional API behavior change.\n- `1.0.8`: Add fail-closed `--execute` gate for Linear write commands and align setup examples.\n- `1.0.7`: Package metadata cleanup: restore display name and tags after package-only cleanup.\n- `1.0.6`: Package-only cleanup: publish runtime files plus packaging metadata (`SKILL.md`, `.clawhubignore`, and `scripts/linear.mjs`) and keep the local test harness out of the public archive.\n- `1.0.5`: Fix GraphQL variable construction in issue list queries (`issues`, `my-issues`, `my-todos`, `urgent`, `standup`) so only actually used variables are declared and passed.\n\nChangelog tracked here from `1.0.5` onward.\n\nFile v1.0.20:_meta.json\n\n{\n  \"ownerId\": \"kn78bc0rnqe8pnvd4azdnjvmmd858m3q\",\n  \"slug\": \"linear-native-node\",\n  \"version\": \"1.0.20\",\n  \"publishedAt\": 1783384627758\n}\n\nFile v1.0.20:skill-card.md\n\n## Description: <br>\nLinear Native Node helps agents use Linear's GraphQL API from native Node.js to read workspace data and run explicitly approved issue, comment, status, priority, and project mutations. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[jwestburg](https://clawhub.ai/user/jwestburg) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to inspect Linear teams, projects, workflow states, assigned work, urgent issues, standup summaries, and individual issues, and to create or update Linear records after explicit approval. It is intended for workspaces where the operator is comfortable granting the agent the permissions attached to the configured LINEAR_API_KEY. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The configured LINEAR_API_KEY grants access according to the permissions of the Linear user or account that created it. <br>\nMitigation: Use the least-privileged key available, keep it session-scoped, and install only where those workspace permissions are acceptable. <br>\nRisk: Read command output may include workspace-sensitive Linear issue, project, user, email, description, and URL data. <br>\nMitigation: Review and redact command output before sharing logs, examples, or summaries outside the intended workspace. <br>\nRisk: Write commands can create or modify Linear issues, comments, workflow state, priority, and projects. <br>\nMitigation: Run write commands only with the prefix --execute flag after confirming the exact Linear target and intended mutation. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/jwestburg/skills/linear-native-node) <br>\n- [Linear API Key Settings](https://linear.app/settings/api) <br>\n- [Linear GraphQL API Endpoint](https://api.linear.app/graphql) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, json, shell commands, guidance] <br>\n**Output Format:** [Plain text or JSON command output with shell command examples in Markdown documentation.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Read commands may include workspace-sensitive Linear data; write commands require the prefix --execute flag and explicit approval.] <br>\n\n## Skill Version(s): <br>\n1.0.20 (source: server release metadata and frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.15: 4 files, 11926 bytes\n\nFiles: scripts/linear.mjs (22418b), skill-card.md (2454b), SKILL.md (11580b), _meta.json (138b)\n\nFile v1.0.15:SKILL.md\n\n---\nname: linear-native-node\ndescription: Direct Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Can write to Linear via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party service.\nversion: 1.0.15\nrisk_class: external-api-read-write-gated\n---\n\n# Linear Native Node\n\nVersion: 1.0.15 / publishable utility.\n\nUse `scripts/linear.mjs` to talk directly to Linear's GraphQL API at `https://api.linear.app/graphql`.\n\nNative Node 18+. Zero npm dependencies. Windows, macOS, and Linux friendly. No bash, Python, OAuth gateway, browser login, or third-party proxy.\n\n## Security behavior\n\n- Reads `LINEAR_API_KEY` and optional `LINEAR_DEFAULT_TEAM` from the process environment only.\n- Does not read credential files or `~/.openclaw/.env`.\n- Sends GraphQL requests only to `https://api.linear.app/graphql`.\n- Does not write local files, log secrets, or print the API key.\n- Linear personal API keys inherit the permissions of the user/account that created them. Treat output as workspace-sensitive; use the least-privileged key model Linear offers if scoped keys become available.\n- Read-only commands are the default usage pattern.\n- Write commands are explicit commands (`create`, `comment`, `status`, `priority`, `project-create`) and are fail-closed by default: the script exits unless `--execute` is present after explicit user approval for that specific Linear mutation.\n- `--execute` is only a script-level flag gate. Mutation appropriateness is enforced by the operator/agent approval policy: do not run a write unless the current user instruction or approval names the Linear action, target, and intended mutation.\n- Static-analysis note: env-var + network-send warnings are expected for this skill because it uses a named API key to call Linear's fixed GraphQL endpoint. Treat any broad env enumeration, dynamic endpoint, or key-printing behavior as a blocker.\n- Read command output may include workspace names, user names, emails, issue titles, issue descriptions, and URLs from the connected Linear workspace. Redact that content before sharing logs or examples externally.\n\n\n## Why this skill\n\nThis is the direct/local version of common Linear helper workflows:\n\n- Keeps API access between this machine and Linear only.\n- Uses `LINEAR_API_KEY` from the process environment only; never print the key.\n- Avoids bash-oriented helpers that break on Windows.\n- Avoids third-party OAuth/gateway tools or intermediary services.\n- Keeps a tight auditable scope: viewer/org/team lookup, issue list/read/create/update/comment, practical personal summaries, and branch names.\n\n## Setup\n\nCreate a Linear API key at:\n\n```text\nhttps://linear.app/settings/api\n```\n\nPowerShell session-only setup:\n\n```powershell\n$env:LINEAR_API_KEY = \"<your-linear-key>\"\n$env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n```\n\nmacOS/Linux shell session-only setup:\n\n```bash\nexport LINEAR_API_KEY=\"<your-linear-key>\"\nexport LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n`LINEAR_DEFAULT_TEAM` is optional. Examples below use `TEAM` and `TEAM-123` as placeholders; replace them with your Linear team key and issue identifiers.\n\n## Run\n\nFrom PowerShell, bash, zsh, or any shell with Node on PATH:\n\n```bash\nnode \"<skill-dir>/scripts/linear.mjs\" help\nnode \"<skill-dir>/scripts/linear.mjs\" viewer\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --limit 10\n```\n\nFrom OpenClaw, use the bundled script directly:\n\n```text\nRun: node <skill-dir>/scripts/linear.mjs my-issues --team TEAM\nRun only after explicit approval: node <skill-dir>/scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submitting credentials.\" --priority high --execute\n```\n\nAdd `--json` to commands when structured output is useful.\n\n## Commands\n\nRead-only:\n\n```text\nhelp\nviewer\norganization\nteams\nprojects [--team TEAM] [--limit N]\nstates <TEAM_KEY>\nissues [--team TEAM] [--mine] [--state STATE] [--limit N]\nmy-issues [--team TEAM] [--state STATE] [--limit N]\nmy-todos [--team TEAM] [--limit N]\nurgent [--team TEAM] [--mine] [--limit N]\nstandup [--team TEAM] [--limit N]\nissue <IDENTIFIER>\nbranch <IDENTIFIER>\n```\n\nFor list commands, `--team TEAM` narrows results to one team. If `--team` is omitted and `LINEAR_DEFAULT_TEAM` is set, that default is used where supported. If neither is set, list commands that support broad lookup query across the accessible workspace scope instead of failing. `states <TEAM_KEY>` always requires a team key.\n\nWrites to Linear require explicit approval and `--execute`:\n\n```text\nproject-create [TEAM_KEY] \"Name\" [\"Description\"] --execute\ncreate [TEAM_KEY] \"Title\" [\"Description\"] [--priority urgent|high|medium|low|none] --execute\ncomment <IDENTIFIER> \"Comment\" --execute\nstatus <IDENTIFIER> <state-name> --execute\npriority <IDENTIFIER> <urgent|high|medium|low|none> --execute\n```\n\nFor `project-create` and `create`, `TEAM_KEY` may be omitted only when `LINEAR_DEFAULT_TEAM` is set; with two or more positional args, the first arg is treated as the explicit team key. Without `--execute`, write commands fail before contacting Linear.\n\nFor agent use, execute write commands only when the user's current instruction explicitly names the Linear action, target, and intended mutation (for example, \"create a Linear issue for...\" or \"move TEAM-123 to Done\") or the user explicitly approves the exact command.\n\n## Examples\n\nList teams, projects, and states:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" teams\nnode \"<skill-dir>/scripts/linear.mjs\" projects --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" states TEAM\n```\n\nCreate a project:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" project-create TEAM \"Release Planning\" \"Track launch scope and milestones.\" --execute\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" project-create \"Release Planning\" --execute\n```\n\nList issues:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --state \"In Progress\"\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" my-todos --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" urgent --team TEAM\n```\n\nRead and update an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issue TEAM-123\nnode \"<skill-dir>/scripts/linear.mjs\" comment TEAM-123 \"Added reproduction notes.\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" status TEAM-123 \"In Progress\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" priority TEAM-123 urgent --execute\n```\n\nCreate an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" create TEAM \"Fix notification delivery\" \"Notifications are delayed for some users.\" --priority high --execute\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" create \"Fix notification delivery\" --priority high --execute\n```\n\nGenerate a GitHub-friendly branch name from the Linear issue title:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" branch TEAM-123\n```\n\nGet machine-readable output:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM --json\n```\n\n## Notes\n\n- Prefer issue identifiers like `TEAM-123`; the script resolves them before updates that need Linear IDs.\n- Priority values map to Linear's native values: `urgent`, `high`, `medium`, `low`, `none`.\n- Missing keys, 401/403 responses, proxy/egress denial hints, GraphQL errors, missing teams/states, and invalid priorities produce clear stderr errors with non-zero exit codes.\n- When omitting `TEAM_KEY` via `LINEAR_DEFAULT_TEAM`, pass only the project name or issue title. Descriptions require an explicit `TEAM_KEY` because two positional arguments are parsed as `TEAM_KEY` plus name/title.\n- List commands default to `--limit 25`; `standup` defaults to `--limit 20`. Limits must be integers from 1-100. The script returns the first page ordered by Linear `updatedAt`; it does not auto-paginate.\n- Linear HTTP errors, including rate-limit responses, surface as clear stderr errors with non-zero exit codes; the script does not retry or back off. For 401/403, verify both Linear key permissions and whether an egress proxy/sandbox is blocking `api.linear.app`.\n- `standup` summarizes assigned issues in started and completed Linear workflow states within the returned first page; it is intentionally lightweight, not a time tracker or date-windowed report.\n- Help is available with `help`, `-h`, or `--help`. There is no `--version` flag; use the `version:` frontmatter and changelog.\n\n## Sample output\n\nSanitized representative output for eval/review checks:\n\n### Example success output\n\n```text\n$ node scripts/linear.mjs viewer\nExample User <user@example.com>\n\n$ node scripts/linear.mjs my-issues --team TEAM --limit 2\nTEAM-123 [In Progress/high] @Example User - Fix notification delivery\nTEAM-124 [Todo/medium] @Example User - Draft release checklist\n```\n\n### Example error output\n\n```text\n$ node scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submit.\"\nerror: write command \"create\" is blocked by default. Re-run with --execute only after explicit approval.\n\n$ node scripts/linear.mjs viewer\nerror: LINEAR_API_KEY is not set.\nCreate a Linear API key at: https://linear.app/settings/api\nThen add it for this shell session:\n  PowerShell: $env:LINEAR_API_KEY = \"<your-linear-key>\"\n  bash/zsh:    export LINEAR_API_KEY=\"<your-linear-key>\"\nOptional default team:\n  PowerShell: $env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n  bash/zsh:    export LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n\n## Changelog\n\n- `1.0.15`: ClawHub publication/version refresh after public-readiness review; no runtime behavior change.\n- `1.0.14`: Reject extra positional arguments for single/two-argument commands, including write commands, to prevent truncated operator intent.\n- `1.0.13`: Add cross-platform missing-key hints, clarify 401/403 proxy-vs-auth diagnostics, guard mutually exclusive state filters, and expand offline gate tests.\n- `1.0.12`: Clarify that `--execute` is a script-level flag gate while mutation appropriateness remains an operator/agent approval-policy requirement.\n- `1.0.11`: Tighten public docs for Linear key permissions, team/default-team behavior, write approval wording, pagination/rate-limit behavior, help support, sample-output scanability, and consistent `--limit` validation.\n- `1.0.10`: Add sanitized sample outputs for eval review, rename the write-gate helper for clearer fail-closed call sites, and keep local test harness excluded from ClawHub packages.\n- `1.0.9`: Security/audit polish: document the write-command approval gate and expected static-analysis warning for env-var + fixed Linear endpoint usage. No functional API behavior change.\n- `1.0.8`: Add fail-closed `--execute` gate for Linear write commands and align setup examples.\n- `1.0.7`: Package metadata cleanup: restore display name and tags after package-only cleanup.\n- `1.0.6`: Package-only cleanup: publish runtime files plus packaging metadata (`SKILL.md`, `.clawhubignore`, and `scripts/linear.mjs`) and keep the local test harness out of the public archive.\n- `1.0.5`: Fix GraphQL variable construction in issue list queries (`issues`, `my-issues`, `my-todos`, `urgent`, `standup`) so only actually used variables are declared and passed.\n\nChangelog tracked here from `1.0.5` onward.\n\nFile v1.0.15:_meta.json\n\n{\n  \"ownerId\": \"kn78bc0rnqe8pnvd4azdnjvmmd858m3q\",\n  \"slug\": \"linear-native-node\",\n  \"version\": \"1.0.15\",\n  \"publishedAt\": 1781477012562\n}\n\nFile v1.0.15:skill-card.md\n\n## Description: <br>\nDirect Linear workspace helper using Linear's GraphQL API from native Node.js for listing, reading, summarizing, creating, commenting on, and updating Linear issues, projects, teams, states, priorities, standup notes, and branch names. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[jwestburg](https://clawhub.ai/user/jwestburg) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineering agents use this skill to inspect Linear workspace data and, with explicit approval, create or update Linear issues, comments, priorities, statuses, and projects from a local Node.js command. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill requires sensitive API credentials and sends user requests or workspace data to an external service. <br>\nMitigation: Install and run it only with approved credentials, avoid secrets or confidential data unless the disclosure is intentional, and redact workspace-sensitive output before sharing logs. <br>\nRisk: Approved write commands can create or modify Linear issues, comments, priorities, statuses, or projects. <br>\nMitigation: Use read-only commands by default and run write commands only when the user explicitly approves the exact action, target, and intended mutation; the script also requires --execute for mutations. <br>\n\n\n## Reference(s): <br>\n- [ClawHub: Linear Native Node](https://clawhub.ai/jwestburg/linear-native-node) <br>\n- [Linear GraphQL API endpoint](https://api.linear.app/graphql) <br>\n- [Linear API key settings](https://linear.app/settings/api) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, JSON, Shell commands, Guidance] <br>\n**Output Format:** [Plain text or JSON from Node.js command output, with Markdown setup and usage guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Write commands require an explicit --execute flag and user approval; list commands return the first page and support bounded limits.] <br>\n\n## Skill Version(s): <br>\n1.0.15 (source: server release evidence and SKILL.md frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.14: 4 files, 11781 bytes\n\nFiles: scripts/linear.mjs (22418b), skill-card.md (2204b), SKILL.md (11426b), _meta.json (138b)\n\nFile v1.0.14:SKILL.md\n\n---\nname: linear-native-node\ndescription: Direct Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Can write to Linear via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party service.\nversion: 1.0.14\n---\n\n# Linear Native Node\n\nVersion: 1.0.14 / publishable utility.\n\nUse `scripts/linear.mjs` to talk directly to Linear's GraphQL API at `https://api.linear.app/graphql`.\n\nNative Node 18+. Zero npm dependencies. Windows, macOS, and Linux friendly. No bash, Python, OAuth gateway, browser login, or third-party proxy.\n\n## Security behavior\n\n- Reads `LINEAR_API_KEY` and optional `LINEAR_DEFAULT_TEAM` from the process environment only.\n- Does not read credential files or `~/.openclaw/.env`.\n- Sends GraphQL requests only to `https://api.linear.app/graphql`.\n- Does not write local files, log secrets, or print the API key.\n- Linear personal API keys inherit the permissions of the user/account that created them. Treat output as workspace-sensitive; use the least-privileged key model Linear offers if scoped keys become available.\n- Read-only commands are the default usage pattern.\n- Write commands are explicit commands (`create`, `comment`, `status`, `priority`, `project-create`) and are fail-closed by default: the script exits unless `--execute` is present after explicit user approval for that specific Linear mutation.\n- `--execute` is only a script-level flag gate. Mutation appropriateness is enforced by the operator/agent approval policy: do not run a write unless the current user instruction or approval names the Linear action, target, and intended mutation.\n- Static-analysis note: env-var + network-send warnings are expected for this skill because it uses a named API key to call Linear's fixed GraphQL endpoint. Treat any broad env enumeration, dynamic endpoint, or key-printing behavior as a blocker.\n- Read command output may include workspace names, user names, emails, issue titles, issue descriptions, and URLs from the connected Linear workspace. Redact that content before sharing logs or examples externally.\n\n\n## Why this skill\n\nThis is the direct/local version of common Linear helper workflows:\n\n- Keeps API access between this machine and Linear only.\n- Uses `LINEAR_API_KEY` from the process environment only; never print the key.\n- Avoids bash-oriented helpers that break on Windows.\n- Avoids third-party OAuth/gateway tools or intermediary services.\n- Keeps a tight auditable scope: viewer/org/team lookup, issue list/read/create/update/comment, practical personal summaries, and branch names.\n\n## Setup\n\nCreate a Linear API key at:\n\n```text\nhttps://linear.app/settings/api\n```\n\nPowerShell session-only setup:\n\n```powershell\n$env:LINEAR_API_KEY = \"<your-linear-key>\"\n$env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n```\n\nmacOS/Linux shell session-only setup:\n\n```bash\nexport LINEAR_API_KEY=\"<your-linear-key>\"\nexport LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n`LINEAR_DEFAULT_TEAM` is optional. Examples below use `TEAM` and `TEAM-123` as placeholders; replace them with your Linear team key and issue identifiers.\n\n## Run\n\nFrom PowerShell, bash, zsh, or any shell with Node on PATH:\n\n```bash\nnode \"<skill-dir>/scripts/linear.mjs\" help\nnode \"<skill-dir>/scripts/linear.mjs\" viewer\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --limit 10\n```\n\nFrom OpenClaw, use the bundled script directly:\n\n```text\nRun: node <skill-dir>/scripts/linear.mjs my-issues --team TEAM\nRun only after explicit approval: node <skill-dir>/scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submitting credentials.\" --priority high --execute\n```\n\nAdd `--json` to commands when structured output is useful.\n\n## Commands\n\nRead-only:\n\n```text\nhelp\nviewer\norganization\nteams\nprojects [--team TEAM] [--limit N]\nstates <TEAM_KEY>\nissues [--team TEAM] [--mine] [--state STATE] [--limit N]\nmy-issues [--team TEAM] [--state STATE] [--limit N]\nmy-todos [--team TEAM] [--limit N]\nurgent [--team TEAM] [--mine] [--limit N]\nstandup [--team TEAM] [--limit N]\nissue <IDENTIFIER>\nbranch <IDENTIFIER>\n```\n\nFor list commands, `--team TEAM` narrows results to one team. If `--team` is omitted and `LINEAR_DEFAULT_TEAM` is set, that default is used where supported. If neither is set, list commands that support broad lookup query across the accessible workspace scope instead of failing. `states <TEAM_KEY>` always requires a team key.\n\nWrites to Linear require explicit approval and `--execute`:\n\n```text\nproject-create [TEAM_KEY] \"Name\" [\"Description\"] --execute\ncreate [TEAM_KEY] \"Title\" [\"Description\"] [--priority urgent|high|medium|low|none] --execute\ncomment <IDENTIFIER> \"Comment\" --execute\nstatus <IDENTIFIER> <state-name> --execute\npriority <IDENTIFIER> <urgent|high|medium|low|none> --execute\n```\n\nFor `project-create` and `create`, `TEAM_KEY` may be omitted only when `LINEAR_DEFAULT_TEAM` is set; with two or more positional args, the first arg is treated as the explicit team key. Without `--execute`, write commands fail before contacting Linear.\n\nFor agent use, execute write commands only when the user's current instruction explicitly names the Linear action, target, and intended mutation (for example, \"create a Linear issue for...\" or \"move TEAM-123 to Done\") or the user explicitly approves the exact command.\n\n## Examples\n\nList teams, projects, and states:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" teams\nnode \"<skill-dir>/scripts/linear.mjs\" projects --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" states TEAM\n```\n\nCreate a project:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" project-create TEAM \"Release Planning\" \"Track launch scope and milestones.\" --execute\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" project-create \"Release Planning\" --execute\n```\n\nList issues:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --state \"In Progress\"\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" my-todos --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" urgent --team TEAM\n```\n\nRead and update an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issue TEAM-123\nnode \"<skill-dir>/scripts/linear.mjs\" comment TEAM-123 \"Added reproduction notes.\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" status TEAM-123 \"In Progress\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" priority TEAM-123 urgent --execute\n```\n\nCreate an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" create TEAM \"Fix notification delivery\" \"Notifications are delayed for some users.\" --priority high --execute\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" create \"Fix notification delivery\" --priority high --execute\n```\n\nGenerate a GitHub-friendly branch name from the Linear issue title:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" branch TEAM-123\n```\n\nGet machine-readable output:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM --json\n```\n\n## Notes\n\n- Prefer issue identifiers like `TEAM-123`; the script resolves them before updates that need Linear IDs.\n- Priority values map to Linear's native values: `urgent`, `high`, `medium`, `low`, `none`.\n- Missing keys, 401/403 responses, proxy/egress denial hints, GraphQL errors, missing teams/states, and invalid priorities produce clear stderr errors with non-zero exit codes.\n- When omitting `TEAM_KEY` via `LINEAR_DEFAULT_TEAM`, pass only the project name or issue title. Descriptions require an explicit `TEAM_KEY` because two positional arguments are parsed as `TEAM_KEY` plus name/title.\n- List commands default to `--limit 25`; `standup` defaults to `--limit 20`. Limits must be integers from 1-100. The script returns the first page ordered by Linear `updatedAt`; it does not auto-paginate.\n- Linear HTTP errors, including rate-limit responses, surface as clear stderr errors with non-zero exit codes; the script does not retry or back off. For 401/403, verify both Linear key permissions and whether an egress proxy/sandbox is blocking `api.linear.app`.\n- `standup` summarizes assigned issues in started and completed Linear workflow states within the returned first page; it is intentionally lightweight, not a time tracker or date-windowed report.\n- Help is available with `help`, `-h`, or `--help`. There is no `--version` flag; use the `version:` frontmatter and changelog.\n\n## Sample output\n\nSanitized representative output for eval/review checks:\n\n### Example success output\n\n```text\n$ node scripts/linear.mjs viewer\nExample User <user@example.com>\n\n$ node scripts/linear.mjs my-issues --team TEAM --limit 2\nTEAM-123 [In Progress/high] @Example User - Fix notification delivery\nTEAM-124 [Todo/medium] @Example User - Draft release checklist\n```\n\n### Example error output\n\n```text\n$ node scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submit.\"\nerror: write command \"create\" is blocked by default. Re-run with --execute only after explicit approval.\n\n$ node scripts/linear.mjs viewer\nerror: LINEAR_API_KEY is not set.\nCreate a Linear API key at: https://linear.app/settings/api\nThen add it for this shell session:\n  PowerShell: $env:LINEAR_API_KEY = \"<your-linear-key>\"\n  bash/zsh:    export LINEAR_API_KEY=\"<your-linear-key>\"\nOptional default team:\n  PowerShell: $env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n  bash/zsh:    export LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n\n## Changelog\n\n- `1.0.14`: Reject extra positional arguments for single/two-argument commands, including write commands, to prevent truncated operator intent.\n- `1.0.13`: Add cross-platform missing-key hints, clarify 401/403 proxy-vs-auth diagnostics, guard mutually exclusive state filters, and expand offline gate tests.\n- `1.0.12`: Clarify that `--execute` is a script-level flag gate while mutation appropriateness remains an operator/agent approval-policy requirement.\n- `1.0.11`: Tighten public docs for Linear key permissions, team/default-team behavior, write approval wording, pagination/rate-limit behavior, help support, sample-output scanability, and consistent `--limit` validation.\n- `1.0.10`: Add sanitized sample outputs for eval review, rename the write-gate helper for clearer fail-closed call sites, and keep local test harness excluded from ClawHub packages.\n- `1.0.9`: Security/audit polish: document the write-command approval gate and expected static-analysis warning for env-var + fixed Linear endpoint usage. No functional API behavior change.\n- `1.0.8`: Add fail-closed `--execute` gate for Linear write commands and align setup examples.\n- `1.0.7`: Package metadata cleanup: restore display name and tags after package-only cleanup.\n- `1.0.6`: Package-only cleanup: publish runtime files plus packaging metadata (`SKILL.md`, `.clawhubignore`, and `scripts/linear.mjs`) and keep the local test harness out of the public archive.\n- `1.0.5`: Fix GraphQL variable construction in issue list queries (`issues`, `my-issues`, `my-todos`, `urgent`, `standup`) so only actually used variables are declared and passed.\n\nChangelog tracked here from `1.0.5` onward.\n\nFile v1.0.14:_meta.json\n\n{\n  \"ownerId\": \"kn78bc0rnqe8pnvd4azdnjvmmd858m3q\",\n  \"slug\": \"linear-native-node\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1780376480497\n}\n\nFile v1.0.14:skill-card.md\n\n## Description: <br>\nDirect Linear workspace helper using Linear's GraphQL API from native Node.js. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[jwestburg](https://clawhub.ai/user/jwestburg) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to inspect Linear workspace data, summarize assigned work, generate branch names, and perform approved issue, comment, status, priority, or project mutations through Linear's GraphQL API. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill uses a user-provided Linear API key and may access workspace-sensitive issue, user, project, and organization data. <br>\nMitigation: Provide the least-privileged Linear key available, keep LINEAR_API_KEY in the process environment only, and redact workspace content before sharing logs or examples. <br>\nRisk: Write commands can create or modify Linear issues, comments, priorities, statuses, and projects. <br>\nMitigation: Run write commands only when the requested Linear action, target, and intended mutation are explicit, and require the --execute flag for the specific approved command. <br>\n\n\n## Reference(s): <br>\n- [Linear GraphQL API endpoint](https://api.linear.app/graphql) <br>\n- [Linear API key settings](https://linear.app/settings/api) <br>\n- [ClawHub skill page](https://clawhub.ai/jwestburg/linear-native-node) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, JSON, Shell commands, Guidance] <br>\n**Output Format:** [Plain text or JSON command output with Markdown usage guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires LINEAR_API_KEY; Linear write commands require an explicit --execute flag after user approval.] <br>\n\n## Skill Version(s): <br>\n1.0.14 (source: server release evidence and SKILL.md frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.13: 4 files, 11852 bytes\n\nFiles: scripts/linear.mjs (22110b), skill-card.md (2775b), SKILL.md (11242b), _meta.json (138b)\n\nFile v1.0.13:SKILL.md\n\n---\nname: linear-native-node\ndescription: Direct Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Can write to Linear via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party service.\nversion: 1.0.13\n---\n\n# Linear Native Node\n\nUse `scripts/linear.mjs` to talk directly to Linear's GraphQL API at `https://api.linear.app/graphql`.\n\nNative Node 18+. Zero npm dependencies. Windows, macOS, and Linux friendly. No bash, Python, OAuth gateway, browser login, or third-party proxy.\n\n## Security behavior\n\n- Reads `LINEAR_API_KEY` and optional `LINEAR_DEFAULT_TEAM` from the process environment only.\n- Does not read credential files or `~/.openclaw/.env`.\n- Sends GraphQL requests only to `https://api.linear.app/graphql`.\n- Does not write local files, log secrets, or print the API key.\n- Linear personal API keys inherit the permissions of the user/account that created them. Treat output as workspace-sensitive; use the least-privileged key model Linear offers if scoped keys become available.\n- Read-only commands are the default usage pattern.\n- Write commands are explicit commands (`create`, `comment`, `status`, `priority`, `project-create`) and are fail-closed by default: the script exits unless `--execute` is present after explicit user approval for that specific Linear mutation.\n- `--execute` is only a script-level flag gate. Mutation appropriateness is enforced by the operator/agent approval policy: do not run a write unless the current user instruction or approval names the Linear action, target, and intended mutation.\n- Static-analysis note: env-var + network-send warnings are expected for this skill because it uses a named API key to call Linear's fixed GraphQL endpoint. Treat any broad env enumeration, dynamic endpoint, or key-printing behavior as a blocker.\n- Read command output may include workspace names, user names, emails, issue titles, issue descriptions, and URLs from the connected Linear workspace. Redact that content before sharing logs or examples externally.\n\n\n## Why this skill\n\nThis is the direct/local version of common Linear helper workflows:\n\n- Keeps API access between this machine and Linear only.\n- Uses `LINEAR_API_KEY` from the process environment only; never print the key.\n- Avoids bash-oriented helpers that break on Windows.\n- Avoids third-party OAuth/gateway tools or intermediary services.\n- Keeps a tight auditable scope: viewer/org/team lookup, issue list/read/create/update/comment, practical personal summaries, and branch names.\n\n## Setup\n\nCreate a Linear API key at:\n\n```text\nhttps://linear.app/settings/api\n```\n\nPowerShell session-only setup:\n\n```powershell\n$env:LINEAR_API_KEY = \"<your-linear-key>\"\n$env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n```\n\nmacOS/Linux shell session-only setup:\n\n```bash\nexport LINEAR_API_KEY=\"<your-linear-key>\"\nexport LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n`LINEAR_DEFAULT_TEAM` is optional. Examples below use `TEAM` and `TEAM-123` as placeholders; replace them with your Linear team key and issue identifiers.\n\n## Run\n\nFrom PowerShell, bash, zsh, or any shell with Node on PATH:\n\n```bash\nnode \"<skill-dir>/scripts/linear.mjs\" help\nnode \"<skill-dir>/scripts/linear.mjs\" viewer\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --limit 10\n```\n\nFrom OpenClaw, use the bundled script directly:\n\n```text\nRun: node <skill-dir>/scripts/linear.mjs my-issues --team TEAM\nRun only after explicit approval: node <skill-dir>/scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submitting credentials.\" --priority high --execute\n```\n\nAdd `--json` to commands when structured output is useful.\n\n## Commands\n\nRead-only:\n\n```text\nhelp\nviewer\norganization\nteams\nprojects [--team TEAM] [--limit N]\nstates <TEAM_KEY>\nissues [--team TEAM] [--mine] [--state STATE] [--limit N]\nmy-issues [--team TEAM] [--state STATE] [--limit N]\nmy-todos [--team TEAM] [--limit N]\nurgent [--team TEAM] [--mine] [--limit N]\nstandup [--team TEAM] [--limit N]\nissue <IDENTIFIER>\nbranch <IDENTIFIER>\n```\n\nFor list commands, `--team TEAM` narrows results to one team. If `--team` is omitted and `LINEAR_DEFAULT_TEAM` is set, that default is used where supported. If neither is set, list commands that support broad lookup query across the accessible workspace scope instead of failing. `states <TEAM_KEY>` always requires a team key.\n\nWrites to Linear require explicit approval and `--execute`:\n\n```text\nproject-create [TEAM_KEY] \"Name\" [\"Description\"] --execute\ncreate [TEAM_KEY] \"Title\" [\"Description\"] [--priority urgent|high|medium|low|none] --execute\ncomment <IDENTIFIER> \"Comment\" --execute\nstatus <IDENTIFIER> <state-name> --execute\npriority <IDENTIFIER> <urgent|high|medium|low|none> --execute\n```\n\nFor `project-create` and `create`, `TEAM_KEY` may be omitted only when `LINEAR_DEFAULT_TEAM` is set; with two or more positional args, the first arg is treated as the explicit team key. Without `--execute`, write commands fail before contacting Linear.\n\nFor agent use, execute write commands only when the user's current instruction explicitly names the Linear action, target, and intended mutation (for example, \"create a Linear issue for...\" or \"move TEAM-123 to Done\") or the user explicitly approves the exact command.\n\n## Examples\n\nList teams, projects, and states:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" teams\nnode \"<skill-dir>/scripts/linear.mjs\" projects --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" states TEAM\n```\n\nCreate a project:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" project-create TEAM \"Release Planning\" \"Track launch scope and milestones.\" --execute\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" project-create \"Release Planning\" --execute\n```\n\nList issues:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --state \"In Progress\"\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" my-todos --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" urgent --team TEAM\n```\n\nRead and update an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issue TEAM-123\nnode \"<skill-dir>/scripts/linear.mjs\" comment TEAM-123 \"Added reproduction notes.\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" status TEAM-123 \"In Progress\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" priority TEAM-123 urgent --execute\n```\n\nCreate an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" create TEAM \"Fix notification delivery\" \"Notifications are delayed for some users.\" --priority high --execute\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" create \"Fix notification delivery\" --priority high --execute\n```\n\nGenerate a GitHub-friendly branch name from the Linear issue title:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" branch TEAM-123\n```\n\nGet machine-readable output:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM --json\n```\n\n## Notes\n\n- Prefer issue identifiers like `TEAM-123`; the script resolves them before updates that need Linear IDs.\n- Priority values map to Linear's native values: `urgent`, `high`, `medium`, `low`, `none`.\n- Missing keys, 401/403 responses, proxy/egress denial hints, GraphQL errors, missing teams/states, and invalid priorities produce clear stderr errors with non-zero exit codes.\n- When omitting `TEAM_KEY` via `LINEAR_DEFAULT_TEAM`, pass only the project name or issue title. Descriptions require an explicit `TEAM_KEY` because two positional arguments are parsed as `TEAM_KEY` plus name/title.\n- List commands default to `--limit 25`; `standup` defaults to `--limit 20`. Limits must be integers from 1-100. The script returns the first page ordered by Linear `updatedAt`; it does not auto-paginate.\n- Linear HTTP errors, including rate-limit responses, surface as clear stderr errors with non-zero exit codes; the script does not retry or back off. For 401/403, verify both Linear key permissions and whether an egress proxy/sandbox is blocking `api.linear.app`.\n- `standup` summarizes assigned issues in started and completed Linear workflow states within the returned first page; it is intentionally lightweight, not a time tracker or date-windowed report.\n- Help is available with `help`, `-h`, or `--help`. There is no `--version` flag; use the `version:` frontmatter and changelog.\n\n## Sample output\n\nSanitized representative output for eval/review checks:\n\n### Example success output\n\n```text\n$ node scripts/linear.mjs viewer\nExample User <user@example.com>\n\n$ node scripts/linear.mjs my-issues --team TEAM --limit 2\nTEAM-123 [In Progress/high] @Example User - Fix notification delivery\nTEAM-124 [Todo/medium] @Example User - Draft release checklist\n```\n\n### Example error output\n\n```text\n$ node scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submit.\"\nerror: write command \"create\" is blocked by default. Re-run with --execute only after explicit approval.\n\n$ node scripts/linear.mjs viewer\nerror: LINEAR_API_KEY is not set.\nCreate a Linear API key at: https://linear.app/settings/api\nThen add it for this shell session:\n  PowerShell: $env:LINEAR_API_KEY = \"<your-linear-key>\"\n  bash/zsh:    export LINEAR_API_KEY=\"<your-linear-key>\"\nOptional default team:\n  PowerShell: $env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n  bash/zsh:    export LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n\n## Changelog\n\n- `1.0.13`: Add cross-platform missing-key hints, clarify 401/403 proxy-vs-auth diagnostics, guard mutually exclusive state filters, and expand offline gate tests.\n- `1.0.12`: Clarify that `--execute` is a script-level flag gate while mutation appropriateness remains an operator/agent approval-policy requirement.\n- `1.0.11`: Tighten public docs for Linear key permissions, team/default-team behavior, write approval wording, pagination/rate-limit behavior, help support, sample-output scanability, and consistent `--limit` validation.\n- `1.0.10`: Add sanitized sample outputs for eval review, rename the write-gate helper for clearer fail-closed call sites, and keep local test harness excluded from ClawHub packages.\n- `1.0.9`: Security/audit polish: document the write-command approval gate and expected static-analysis warning for env-var + fixed Linear endpoint usage. No functional API behavior change.\n- `1.0.8`: Add fail-closed `--execute` gate for Linear write commands and align setup examples.\n- `1.0.7`: Package metadata cleanup: restore display name and tags after package-only cleanup.\n- `1.0.6`: Package-only cleanup: publish runtime files plus packaging metadata (`SKILL.md`, `.clawhubignore`, and `scripts/linear.mjs`) and keep the local test harness out of the public archive.\n- `1.0.5`: Fix GraphQL variable construction in issue list queries (`issues`, `my-issues`, `my-todos`, `urgent`, `standup`) so only actually used variables are declared and passed.\n\nChangelog tracked here from `1.0.5` onward.\n\nFile v1.0.13:_meta.json\n\n{\n  \"ownerId\": \"kn78bc0rnqe8pnvd4azdnjvmmd858m3q\",\n  \"slug\": \"linear-native-node\",\n  \"version\": \"1.0.13\",\n  \"publishedAt\": 1780372619051\n}\n\nFile v1.0.13:skill-card.md\n\n## Description: <br>\nDirect Linear workspace helper using Linear's GraphQL API from native Node.js for reading Linear workspace data and performing explicitly approved issue, comment, status, priority, and project mutations. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[jwestburg](https://clawhub.ai/user/jwestburg) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to inspect Linear teams, projects, workflow states, assigned issues, urgent work, standup context, and branch names, and to create or update Linear records after explicit approval. It is suited for local workflow automation where API access stays between the user's machine and Linear. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill requires a Linear API key with access inherited from the user or account that created it. <br>\nMitigation: Use the least-privileged or dedicated key model available, keep the key in the process environment only, and rotate it if command output or logs are exposed. <br>\nRisk: Write commands can create or modify Linear issues, comments, workflow status, priority, and projects. <br>\nMitigation: Run write commands only after explicit user approval naming the Linear action, target, and intended mutation, and require the --execute flag. <br>\nRisk: Read command output may include workspace-sensitive issue content, URLs, user names, and emails. <br>\nMitigation: Redact Linear output before sharing logs, examples, or generated summaries outside the intended workspace audience. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page: Linear Native Node](https://clawhub.ai/jwestburg/linear-native-node) <br>\n- [Publisher profile: jwestburg](https://clawhub.ai/user/jwestburg) <br>\n- [Linear API key settings](https://linear.app/settings/api) <br>\n- [Linear GraphQL endpoint](https://api.linear.app/graphql) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, JSON, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with command examples; runtime output is plain text or JSON when --json is used.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Read commands may include Linear issue titles, descriptions, URLs, user names, and emails; write commands require --execute.] <br>\n\n## Skill Version(s): <br>\n1.0.13 (source: server release evidence and SKILL.md frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.12: 4 files, 11273 bytes\n\nFiles: scripts/linear.mjs (21625b), skill-card.md (2138b), SKILL.md (10777b), _meta.json (138b)\n\nFile v1.0.12:SKILL.md\n\n---\nname: linear-native-node\ndescription: Direct Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Can write to Linear via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party service.\nversion: 1.0.12\n---\n\n# Linear Native Node\n\nUse `scripts/linear.mjs` to talk directly to Linear's GraphQL API at `https://api.linear.app/graphql`.\n\nNative Node 18+. Zero npm dependencies. Windows, macOS, and Linux friendly. No bash, Python, OAuth gateway, browser login, or third-party proxy.\n\n## Security behavior\n\n- Reads `LINEAR_API_KEY` and optional `LINEAR_DEFAULT_TEAM` from the process environment only.\n- Does not read credential files or `~/.openclaw/.env`.\n- Sends GraphQL requests only to `https://api.linear.app/graphql`.\n- Does not write local files, log secrets, or print the API key.\n- Linear personal API keys inherit the permissions of the user/account that created them. Treat output as workspace-sensitive; use the least-privileged key model Linear offers if scoped keys become available.\n- Read-only commands are the default usage pattern.\n- Write commands are explicit commands (`create`, `comment`, `status`, `priority`, `project-create`) and are fail-closed by default: the script exits unless `--execute` is present after explicit user approval for that specific Linear mutation.\n- `--execute` is only a script-level flag gate. Mutation appropriateness is enforced by the operator/agent approval policy: do not run a write unless the current user instruction or approval names the Linear action, target, and intended mutation.\n- Static-analysis note: env-var + network-send warnings are expected for this skill because it uses a named API key to call Linear's fixed GraphQL endpoint. Treat any broad env enumeration, dynamic endpoint, or key-printing behavior as a blocker.\n- Read command output may include workspace names, user names, emails, issue titles, issue descriptions, and URLs from the connected Linear workspace. Redact that content before sharing logs or examples externally.\n\n\n## Why this skill\n\nThis is the direct/local version of common Linear helper workflows:\n\n- Keeps API access between this machine and Linear only.\n- Uses `LINEAR_API_KEY` from the process environment only; never print the key.\n- Avoids bash-oriented helpers that break on Windows.\n- Avoids third-party OAuth/gateway tools or intermediary services.\n- Keeps a tight auditable scope: viewer/org/team lookup, issue list/read/create/update/comment, practical personal summaries, and branch names.\n\n## Setup\n\nCreate a Linear API key at:\n\n```text\nhttps://linear.app/settings/api\n```\n\nPowerShell session-only setup:\n\n```powershell\n$env:LINEAR_API_KEY = \"<your-linear-key>\"\n$env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n```\n\nmacOS/Linux shell session-only setup:\n\n```bash\nexport LINEAR_API_KEY=\"<your-linear-key>\"\nexport LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n`LINEAR_DEFAULT_TEAM` is optional. Examples below use `TEAM` and `TEAM-123` as placeholders; replace them with your Linear team key and issue identifiers.\n\n## Run\n\nFrom PowerShell, bash, zsh, or any shell with Node on PATH:\n\n```bash\nnode \"<skill-dir>/scripts/linear.mjs\" help\nnode \"<skill-dir>/scripts/linear.mjs\" viewer\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --limit 10\n```\n\nFrom OpenClaw, use the bundled script directly:\n\n```text\nRun: node <skill-dir>/scripts/linear.mjs my-issues --team TEAM\nRun only after explicit approval: node <skill-dir>/scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submitting credentials.\" --priority high --execute\n```\n\nAdd `--json` to commands when structured output is useful.\n\n## Commands\n\nRead-only:\n\n```text\nhelp\nviewer\norganization\nteams\nprojects [--team TEAM] [--limit N]\nstates <TEAM_KEY>\nissues [--team TEAM] [--mine] [--state STATE] [--limit N]\nmy-issues [--team TEAM] [--state STATE] [--limit N]\nmy-todos [--team TEAM] [--limit N]\nurgent [--team TEAM] [--mine] [--limit N]\nstandup [--team TEAM] [--limit N]\nissue <IDENTIFIER>\nbranch <IDENTIFIER>\n```\n\nFor list commands, `--team TEAM` narrows results to one team. If `--team` is omitted and `LINEAR_DEFAULT_TEAM` is set, that default is used where supported. If neither is set, list commands that support broad lookup query across the accessible workspace scope instead of failing. `states <TEAM_KEY>` always requires a team key.\n\nWrites to Linear require explicit approval and `--execute`:\n\n```text\nproject-create [TEAM_KEY] \"Name\" [\"Description\"] --execute\ncreate [TEAM_KEY] \"Title\" [\"Description\"] [--priority urgent|high|medium|low|none] --execute\ncomment <IDENTIFIER> \"Comment\" --execute\nstatus <IDENTIFIER> <state-name> --execute\npriority <IDENTIFIER> <urgent|high|medium|low|none> --execute\n```\n\nFor `project-create` and `create`, `TEAM_KEY` may be omitted only when `LINEAR_DEFAULT_TEAM` is set; with two or more positional args, the first arg is treated as the explicit team key. Without `--execute`, write commands fail before contacting Linear.\n\nFor agent use, execute write commands only when the user's current instruction explicitly names the Linear action, target, and intended mutation (for example, \"create a Linear issue for...\" or \"move TEAM-123 to Done\") or the user explicitly approves the exact command.\n\n## Examples\n\nList teams, projects, and states:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" teams\nnode \"<skill-dir>/scripts/linear.mjs\" projects --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" states TEAM\n```\n\nCreate a project:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" project-create TEAM \"Release Planning\" \"Track launch scope and milestones.\" --execute\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" project-create \"Release Planning\" --execute\n```\n\nList issues:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --state \"In Progress\"\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" my-todos --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" urgent --team TEAM\n```\n\nRead and update an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issue TEAM-123\nnode \"<skill-dir>/scripts/linear.mjs\" comment TEAM-123 \"Added reproduction notes.\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" status TEAM-123 \"In Progress\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" priority TEAM-123 urgent --execute\n```\n\nCreate an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" create TEAM \"Fix notification delivery\" \"Notifications are delayed for some users.\" --priority high --execute\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" create \"Fix notification delivery\" --priority high --execute\n```\n\nGenerate a GitHub-friendly branch name from the Linear issue title:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" branch TEAM-123\n```\n\nGet machine-readable output:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM --json\n```\n\n## Notes\n\n- Prefer issue identifiers like `TEAM-123`; the script resolves them before updates that need Linear IDs.\n- Priority values map to Linear's native values: `urgent`, `high`, `medium`, `low`, `none`.\n- Missing keys, 401/403 responses, GraphQL errors, missing teams/states, and invalid priorities produce clear stderr errors with non-zero exit codes.\n- When omitting `TEAM_KEY` via `LINEAR_DEFAULT_TEAM`, pass only the project name or issue title. Descriptions require an explicit `TEAM_KEY` because two positional arguments are parsed as `TEAM_KEY` plus name/title.\n- List commands default to `--limit 25`; `standup` defaults to `--limit 20`. Limits must be integers from 1-100. The script returns the first page ordered by Linear `updatedAt`; it does not auto-paginate.\n- Linear HTTP errors, including rate-limit responses, surface as clear stderr errors with non-zero exit codes; the script does not retry or back off.\n- `standup` summarizes assigned issues in started and completed Linear workflow states within the returned first page; it is intentionally lightweight, not a time tracker or date-windowed report.\n- Help is available with `help`, `-h`, or `--help`. There is no `--version` flag; use the `version:` frontmatter and changelog.\n\n## Sample output\n\nSanitized representative output for eval/review checks:\n\n### Example success output\n\n```text\n$ node scripts/linear.mjs viewer\nExample User <user@example.com>\n\n$ node scripts/linear.mjs my-issues --team TEAM --limit 2\nTEAM-123 [In Progress/high] @Example User - Fix notification delivery\nTEAM-124 [Todo/medium] @Example User - Draft release checklist\n```\n\n### Example error output\n\n```text\n$ node scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submit.\"\nerror: write command \"create\" is blocked by default. Re-run with --execute only after explicit approval.\n\n$ node scripts/linear.mjs viewer\nerror: LINEAR_API_KEY is not set.\nCreate a Linear API key at: https://linear.app/settings/api\nThen add it to PowerShell for this session:\n  $env:LINEAR_API_KEY = \"<your-linear-key>\"\nOptional default team:\n  $env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n```\n\n## Changelog\n\n- `1.0.12`: Clarify that `--execute` is a script-level flag gate while mutation appropriateness remains an operator/agent approval-policy requirement.\n- `1.0.11`: Tighten public docs for Linear key permissions, team/default-team behavior, write approval wording, pagination/rate-limit behavior, help support, sample-output scanability, and consistent `--limit` validation.\n- `1.0.10`: Add sanitized sample outputs for eval review, rename the write-gate helper for clearer fail-closed call sites, and keep local test harness excluded from ClawHub packages.\n- `1.0.9`: Security/audit polish: document the write-command approval gate and expected static-analysis warning for env-var + fixed Linear endpoint usage. No functional API behavior change.\n- `1.0.8`: Add fail-closed `--execute` gate for Linear write commands and align setup examples.\n- `1.0.7`: Package metadata cleanup: restore display name and tags after package-only cleanup.\n- `1.0.6`: Package-only cleanup: publish runtime files only (`SKILL.md` and `scripts/linear.mjs`) and keep the local test harness out of the public archive.\n- `1.0.5`: Fix GraphQL variable construction in issue list queries (`issues`, `my-issues`, `my-todos`, `urgent`, `standup`) so only actually used variables are declared and passed.\n\nChangelog tracked here from `1.0.5` onward.\n\nFile v1.0.12:_meta.json\n\n{\n  \"ownerId\": \"kn78bc0rnqe8pnvd4azdnjvmmd858m3q\",\n  \"slug\": \"linear-native-node\",\n  \"version\": \"1.0.12\",\n  \"publishedAt\": 1780169196183\n}\n\nFile v1.0.12:skill-card.md\n\n## Description: <br>\nDirect Linear workspace helper using Linear's GraphQL API from native Node.js. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[jwestburg](https://clawhub.ai/user/jwestburg) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineering teams use this skill to inspect Linear workspace data, summarize assigned work, generate branch names, and perform explicitly approved issue or project updates from a local Node.js CLI. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: A provided Linear API key can expose workspace data and permissions available to that key. <br>\nMitigation: Install only when that access is acceptable, provide the key through the process environment, prefer the least-privileged key available, and use --team to narrow reads. <br>\nRisk: Write commands can create projects or issues and update comments, status, or priority in Linear. <br>\nMitigation: Allow --execute only for the specific Linear change the user explicitly intends, including the action, target, and mutation. <br>\n\n\n## Reference(s): <br>\n- [Linear GraphQL API endpoint](https://api.linear.app/graphql) <br>\n- [Linear API key settings](https://linear.app/settings/api) <br>\n- [ClawHub skill page](https://clawhub.ai/jwestburg/linear-native-node) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, JSON, shell commands, configuration, guidance] <br>\n**Output Format:** [Plain text or JSON CLI output with Markdown usage guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Read commands may return Linear workspace-sensitive issue, user, project, and URL data; write commands require --execute.] <br>\n\n## Skill Version(s): <br>\n1.0.12 (source: frontmatter and server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.11: 4 files, 11360 bytes\n\nFiles: scripts/linear.mjs (21625b), skill-card.md (2774b), SKILL.md (10379b), _meta.json (138b)\n\nFile v1.0.11:SKILL.md\n\n---\nname: linear-native-node\ndescription: Direct Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Can write to Linear via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party service.\nversion: 1.0.11\n---\n\n# Linear Native Node\n\nUse `scripts/linear.mjs` to talk directly to Linear's GraphQL API at `https://api.linear.app/graphql`.\n\nNative Node 18+. Zero npm dependencies. Windows, macOS, and Linux friendly. No bash, Python, OAuth gateway, browser login, or third-party proxy.\n\n## Security behavior\n\n- Reads `LINEAR_API_KEY` and optional `LINEAR_DEFAULT_TEAM` from the process environment only.\n- Does not read credential files or `~/.openclaw/.env`.\n- Sends GraphQL requests only to `https://api.linear.app/graphql`.\n- Does not write local files, log secrets, or print the API key.\n- Linear personal API keys inherit the permissions of the user/account that created them. Treat output as workspace-sensitive; use the least-privileged key model Linear offers if scoped keys become available.\n- Read-only commands are the default usage pattern.\n- Write commands are explicit commands (`create`, `comment`, `status`, `priority`, `project-create`) and are fail-closed by default: the script exits unless `--execute` is present after explicit user approval for that specific Linear mutation.\n- Static-analysis note: env-var + network-send warnings are expected for this skill because it uses a named API key to call Linear's fixed GraphQL endpoint. Treat any broad env enumeration, dynamic endpoint, or key-printing behavior as a blocker.\n- Read command output may include workspace names, user names, emails, issue titles, issue descriptions, and URLs from the connected Linear workspace. Redact that content before sharing logs or examples externally.\n\n\n## Why this skill\n\nThis is the direct/local version of common Linear helper workflows:\n\n- Keeps API access between this machine and Linear only.\n- Uses `LINEAR_API_KEY` from the process environment only; never print the key.\n- Avoids bash-oriented helpers that break on Windows.\n- Avoids third-party OAuth/gateway tools or intermediary services.\n- Keeps a tight auditable scope: viewer/org/team lookup, issue list/read/create/update/comment, practical personal summaries, and branch names.\n\n## Setup\n\nCreate a Linear API key at:\n\n```text\nhttps://linear.app/settings/api\n```\n\nPowerShell session-only setup:\n\n```powershell\n$env:LINEAR_API_KEY = \"<your-linear-key>\"\n$env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n```\n\nmacOS/Linux shell session-only setup:\n\n```bash\nexport LINEAR_API_KEY=\"<your-linear-key>\"\nexport LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n`LINEAR_DEFAULT_TEAM` is optional. Examples below use `TEAM` and `TEAM-123` as placeholders; replace them with your Linear team key and issue identifiers.\n\n## Run\n\nFrom PowerShell, bash, zsh, or any shell with Node on PATH:\n\n```bash\nnode \"<skill-dir>/scripts/linear.mjs\" help\nnode \"<skill-dir>/scripts/linear.mjs\" viewer\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --limit 10\n```\n\nFrom OpenClaw, use the bundled script directly:\n\n```text\nRun: node <skill-dir>/scripts/linear.mjs my-issues --team TEAM\nRun only after explicit approval: node <skill-dir>/scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submitting credentials.\" --priority high --execute\n```\n\nAdd `--json` to commands when structured output is useful.\n\n## Commands\n\nRead-only:\n\n```text\nhelp\nviewer\norganization\nteams\nprojects [--team TEAM] [--limit N]\nstates <TEAM_KEY>\nissues [--team TEAM] [--mine] [--state STATE] [--limit N]\nmy-issues [--team TEAM] [--state STATE] [--limit N]\nmy-todos [--team TEAM] [--limit N]\nurgent [--team TEAM] [--mine] [--limit N]\nstandup [--team TEAM] [--limit N]\nissue <IDENTIFIER>\nbranch <IDENTIFIER>\n```\n\nFor list commands, `--team TEAM` narrows results to one team. If `--team` is omitted and `LINEAR_DEFAULT_TEAM` is set, that default is used where supported. If neither is set, list commands that support broad lookup query across the accessible workspace scope instead of failing. `states <TEAM_KEY>` always requires a team key.\n\nWrites to Linear require explicit approval and `--execute`:\n\n```text\nproject-create [TEAM_KEY] \"Name\" [\"Description\"] --execute\ncreate [TEAM_KEY] \"Title\" [\"Description\"] [--priority urgent|high|medium|low|none] --execute\ncomment <IDENTIFIER> \"Comment\" --execute\nstatus <IDENTIFIER> <state-name> --execute\npriority <IDENTIFIER> <urgent|high|medium|low|none> --execute\n```\n\nFor `project-create` and `create`, `TEAM_KEY` may be omitted only when `LINEAR_DEFAULT_TEAM` is set; with two or more positional args, the first arg is treated as the explicit team key. Without `--execute`, write commands fail before contacting Linear.\n\nFor agent use, execute write commands only when the user's current instruction explicitly names the Linear action, target, and intended mutation (for example, \"create a Linear issue for...\" or \"move TEAM-123 to Done\") or the user explicitly approves the exact command.\n\n## Examples\n\nList teams, projects, and states:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" teams\nnode \"<skill-dir>/scripts/linear.mjs\" projects --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" states TEAM\n```\n\nCreate a project:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" project-create TEAM \"Release Planning\" \"Track launch scope and milestones.\" --execute\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" project-create \"Release Planning\" --execute\n```\n\nList issues:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --state \"In Progress\"\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" my-todos --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" urgent --team TEAM\n```\n\nRead and update an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issue TEAM-123\nnode \"<skill-dir>/scripts/linear.mjs\" comment TEAM-123 \"Added reproduction notes.\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" status TEAM-123 \"In Progress\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" priority TEAM-123 urgent --execute\n```\n\nCreate an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" create TEAM \"Fix notification delivery\" \"Notifications are delayed for some users.\" --priority high --execute\n# If LINEAR_DEFAULT_TEAM is set:\nnode \"<skill-dir>/scripts/linear.mjs\" create \"Fix notification delivery\" --priority high --execute\n```\n\nGenerate a GitHub-friendly branch name from the Linear issue title:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" branch TEAM-123\n```\n\nGet machine-readable output:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM --json\n```\n\n## Notes\n\n- Prefer issue identifiers like `TEAM-123`; the script resolves them before updates that need Linear IDs.\n- Priority values map to Linear's native values: `urgent`, `high`, `medium`, `low`, `none`.\n- Missing keys, 401/403 responses, GraphQL errors, missing teams/states, and invalid priorities produce clear stderr errors with non-zero exit codes.\n- When omitting `TEAM_KEY` via `LINEAR_DEFAULT_TEAM`, pass only the project name or issue title. Descriptions require an explicit `TEAM_KEY` because two positional arguments are parsed as `TEAM_KEY` plus name/title.\n- List commands default to `--limit 25`; `standup` defaults to `--limit 20`. Limits must be integers from 1-100. The script returns the first page ordered by Linear `updatedAt`; it does not auto-paginate.\n- Linear HTTP errors, including rate-limit responses, surface as clear stderr errors with non-zero exit codes; the script does not retry or back off.\n- `standup` summarizes assigned issues in started and completed Linear workflow states within the returned first page; it is intentionally lightweight, not a time tracker or date-windowed report.\n- Help is available with `help`, `-h`, or `--help`. There is no `--version` flag; use the `version:` frontmatter and changelog.\n\n## Sample output\n\nSanitized representative output for eval/review checks:\n\n### Example success output\n\n```text\n$ node scripts/linear.mjs viewer\nExample User <user@example.com>\n\n$ node scripts/linear.mjs my-issues --team TEAM --limit 2\nTEAM-123 [In Progress/high] @Example User - Fix notification delivery\nTEAM-124 [Todo/medium] @Example User - Draft release checklist\n```\n\n### Example error output\n\n```text\n$ node scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submit.\"\nerror: write command \"create\" is blocked by default. Re-run with --execute only after explicit approval.\n\n$ node scripts/linear.mjs viewer\nerror: LINEAR_API_KEY is not set.\nCreate a Linear API key at: https://linear.app/settings/api\nThen add it to PowerShell for this session:\n  $env:LINEAR_API_KEY = \"<your-linear-key>\"\nOptional default team:\n  $env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n```\n\n## Changelog\n\n- `1.0.11`: Tighten public docs for Linear key permissions, team/default-team behavior, write approval wording, pagination/rate-limit behavior, help support, sample-output scanability, and consistent `--limit` validation.\n- `1.0.10`: Add sanitized sample outputs for eval review, rename the write-gate helper for clearer fail-closed call sites, and keep local test harness excluded from ClawHub packages.\n- `1.0.9`: Security/audit polish: document the write-command approval gate and expected static-analysis warning for env-var + fixed Linear endpoint usage. No functional API behavior change.\n- `1.0.8`: Add fail-closed `--execute` gate for Linear write commands and align setup examples.\n- `1.0.7`: Package metadata cleanup: restore display name and tags after package-only cleanup.\n- `1.0.6`: Package-only cleanup: publish runtime files only (`SKILL.md` and `scripts/linear.mjs`) and keep the local test harness out of the public archive.\n- `1.0.5`: Fix GraphQL variable construction in issue list queries (`issues`, `my-issues`, `my-todos`, `urgent`, `standup`) so only actually used variables are declared and passed.\n\nChangelog tracked here from `1.0.5` onward.\n\nFile v1.0.11:_meta.json\n\n{\n  \"ownerId\": \"kn78bc0rnqe8pnvd4azdnjvmmd858m3q\",\n  \"slug\": \"linear-native-node\",\n  \"version\": \"1.0.11\",\n  \"publishedAt\": 1779762093061\n}\n\nFile v1.0.11:skill-card.md\n\n## Description: <br>\nDirect Linear workspace helper using Linear's GraphQL API from native Node.js for creating, listing, updating, commenting on, summarizing, and looking up Linear issues, projects, teams, workflow states, priorities, standup notes, and branch names. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[jwestburg](https://clawhub.ai/user/jwestburg) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to inspect Linear workspace data, prepare standup summaries, generate branch names, and perform explicitly approved issue, comment, status, priority, or project mutations through Linear's GraphQL API. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill requires a Linear API key and can access workspace-sensitive Linear data. <br>\nMitigation: Provide LINEAR_API_KEY only for intended tasks, prefer the least-privileged key model available, and redact workspace names, user names, emails, issue titles, descriptions, and URLs before sharing logs. <br>\nRisk: Approved write commands can create or modify Linear issues, comments, priorities, statuses, or projects. <br>\nMitigation: Run write commands only after the user explicitly approves the exact Linear action, target, and mutation, and require --execute for the command to contact Linear. <br>\nRisk: This is a third-party ClawHub skill, so credentials and task approvals depend on local operator trust. <br>\nMitigation: Review the visible skill instructions and artifact behavior before installation, and only provide credentials or approvals that match the current task. <br>\n\n\n## Reference(s): <br>\n- [Linear GraphQL API endpoint](https://api.linear.app/graphql) <br>\n- [Linear API key settings](https://linear.app/settings/api) <br>\n- [ClawHub skill page](https://clawhub.ai/jwestburg/linear-native-node) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, JSON, shell commands, configuration, guidance, API calls] <br>\n**Output Format:** [Plain text or JSON from the Node.js CLI, with Markdown setup and usage guidance in the skill instructions.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Read commands may output Linear workspace-sensitive issue, user, project, email, title, description, and URL data; write commands require --execute.] <br>\n\n## Skill Version(s): <br>\n1.0.11 (source: frontmatter and server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.9: 3 files, 8770 bytes\n\nFiles: scripts/linear.mjs (21733b), SKILL.md (6938b), _meta.json (137b)\n\nFile v1.0.9:SKILL.md\n\n---\nname: linear-native-node\ndescription: Direct Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Can write to Linear via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party service.\n---\n\n# Linear Native Node\n\nUse `scripts/linear.mjs` to talk directly to Linear's GraphQL API at `https://api.linear.app/graphql`.\n\nNative Node 18+. Zero npm dependencies. Windows, macOS, and Linux friendly. No bash, Python, OAuth gateway, browser login, or third-party proxy.\n\n## Security behavior\n\n- Reads `LINEAR_API_KEY` and optional `LINEAR_DEFAULT_TEAM` from the process environment only.\n- Does not read credential files or `~/.openclaw/.env`.\n- Sends GraphQL requests only to `https://api.linear.app/graphql`.\n- Does not write local files, log secrets, or print the API key.\n- Read-only commands are the default usage pattern.\n- Write commands are explicit commands (`create`, `comment`, `status`, `priority`, `project-create`) and are fail-closed by default: the script exits unless `--execute` is present after explicit user approval for that specific Linear mutation.\n- Static-analysis note: env-var + network-send warnings are expected for this skill because it uses a named API key to call Linear's fixed GraphQL endpoint. Treat any broad env enumeration, dynamic endpoint, or key-printing behavior as a blocker.\n\n\n## Why this skill\n\nThis is the private/direct version of common Linear helper workflows:\n\n- Keeps API access between this machine and Linear only.\n- Uses `LINEAR_API_KEY` from the process environment only; never print the key.\n- Avoids bash-oriented helpers that break on Windows.\n- Avoids third-party OAuth/gateway tools; there is no Maton-style intermediary.\n- Keeps a tight auditable scope: viewer/org/team lookup, issue list/read/create/update/comment, practical personal summaries, and branch names.\n\n## Setup\n\nCreate a Linear API key at:\n\n```text\nhttps://linear.app/settings/api\n```\n\nPowerShell session-only setup:\n\n```powershell\n$env:LINEAR_API_KEY = \"<your-linear-key>\"\n$env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n```\n\nmacOS/Linux shell session-only setup:\n\n```bash\nexport LINEAR_API_KEY=\"<your-linear-key>\"\nexport LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n`LINEAR_DEFAULT_TEAM` is optional. Examples below use `TEAM` and `TEAM-123` as placeholders; replace them with your Linear team key and issue identifiers.\n\n## Run\n\nFrom PowerShell, bash, zsh, or any shell with Node on PATH:\n\n```bash\nnode \"<skill-dir>/scripts/linear.mjs\" help\nnode \"<skill-dir>/scripts/linear.mjs\" viewer\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --limit 10\n```\n\nFrom OpenClaw, use the bundled script directly:\n\n```text\nRun: node <skill-dir>/scripts/linear.mjs my-issues --team TEAM\nRun only after explicit approval: node <skill-dir>/scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submitting credentials.\" --priority high --execute\n```\n\nAdd `--json` to commands when structured output is useful.\n\n## Commands\n\nRead-only:\n\n```text\nhelp\nviewer\norganization\nteams\nprojects [--team TEAM] [--limit N]\nstates <TEAM_KEY>\nissues [--team TEAM] [--mine] [--state STATE] [--limit N]\nmy-issues [--team TEAM] [--state STATE] [--limit N]\nmy-todos [--team TEAM] [--limit N]\nurgent [--team TEAM] [--mine] [--limit N]\nstandup [--team TEAM] [--limit N]\nissue <IDENTIFIER>\nbranch <IDENTIFIER>\n```\n\nWrites to Linear require explicit approval and `--execute`:\n\n```text\nproject-create [TEAM_KEY] \"Name\" [\"Description\"] --execute\ncreate [TEAM_KEY] \"Title\" [\"Description\"] [--priority urgent|high|medium|low|none] --execute\ncomment <IDENTIFIER> \"Comment\" --execute\nstatus <IDENTIFIER> <state-name> --execute\npriority <IDENTIFIER> <urgent|high|medium|low|none> --execute\n```\n\nFor agent use, perform write commands only when the user clearly requested the Linear change or explicitly approved it. Without `--execute`, write commands fail before contacting Linear.\n\n## Examples\n\nList teams, projects, and states:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" teams\nnode \"<skill-dir>/scripts/linear.mjs\" projects --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" states TEAM\n```\n\nCreate a project:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" project-create TEAM \"Release Planning\" \"Track launch scope and milestones.\" --execute\n```\n\nList issues:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --state \"In Progress\"\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" my-todos --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" urgent --team TEAM\n```\n\nRead and update an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issue TEAM-123\nnode \"<skill-dir>/scripts/linear.mjs\" comment TEAM-123 \"Added reproduction notes.\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" status TEAM-123 \"In Progress\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" priority TEAM-123 urgent --execute\n```\n\nCreate an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" create TEAM \"Fix notification delivery\" \"Notifications are delayed for some users.\" --priority high --execute\n```\n\nGenerate a GitHub-friendly branch name from the Linear issue title:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" branch TEAM-123\n```\n\nGet machine-readable output:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM --json\n```\n\n## Notes\n\n- Prefer issue identifiers like `TEAM-123`; the script resolves them before updates that need Linear IDs.\n- Priority values map to Linear's native values: `urgent`, `high`, `medium`, `low`, `none`.\n- Missing keys, 401/403 responses, GraphQL errors, missing teams/states, and invalid priorities produce clear stderr errors with non-zero exit codes.\n- `standup` summarizes assigned active and recently completed issues; it is intentionally lightweight, not a time tracker.\n\n## Changelog\n\n- `1.0.9`: Security/audit polish: document the write-command approval gate and expected static-analysis warning for env-var + fixed Linear endpoint usage. No functional API behavior change.\n- `1.0.8`: Add fail-closed `--execute` gate for Linear write commands and align setup examples.\n- `1.0.7`: Package metadata cleanup: restore display name and tags after package-only cleanup.\n- `1.0.6`: Package-only cleanup: publish runtime files only (`SKILL.md` and `scripts/linear.mjs`) and keep the local test harness out of the public archive.\n- `1.0.5`: Fix GraphQL variable construction in issue list queries (`issues`, `my-issues`, `my-todos`, `urgent`, `standup`) so only actually used variables are declared and passed.\n\nFile v1.0.9:_meta.json\n\n{\n  \"ownerId\": \"kn78bc0rnqe8pnvd4azdnjvmmd858m3q\",\n  \"slug\": \"linear-native-node\",\n  \"version\": \"1.0.9\",\n  \"publishedAt\": 1778774088317\n}\n\nArchive v1.0.8: 3 files, 8430 bytes\n\nFiles: scripts/linear.mjs (21575b), SKILL.md (6268b), _meta.json (137b)\n\nFile v1.0.8:SKILL.md\n\n---\nname: linear-native-node\ndescription: Direct Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Can write to Linear via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party service.\n---\n\n# Linear Native Node\n\nUse `scripts/linear.mjs` to talk directly to Linear's GraphQL API at `https://api.linear.app/graphql`.\n\nNative Node 18+. Zero npm dependencies. Windows, macOS, and Linux friendly. No bash, Python, OAuth gateway, browser login, or third-party proxy.\n\n## Security behavior\n\n- Reads `LINEAR_API_KEY` and optional `LINEAR_DEFAULT_TEAM` from the process environment only.\n- Does not read credential files or `~/.openclaw/.env`.\n- Sends GraphQL requests only to `https://api.linear.app/graphql`.\n- Does not write files, log secrets, or print the API key.\n- Write commands are explicit commands (`create`, `comment`, `status`, `priority`, `project-create`) and are fail-closed by default: the script exits unless `--execute` is present after explicit user approval. Read-only commands are the default usage pattern.\n\n\n## Why this skill\n\nThis is the private/direct version of common Linear helper workflows:\n\n- Keeps API access between this machine and Linear only.\n- Uses `LINEAR_API_KEY` from the process environment only; never print the key.\n- Avoids bash-oriented helpers that break on Windows.\n- Avoids third-party OAuth/gateway tools; there is no Maton-style intermediary.\n- Keeps a tight auditable scope: viewer/org/team lookup, issue list/read/create/update/comment, practical personal summaries, and branch names.\n\n## Setup\n\nCreate a Linear API key at:\n\n```text\nhttps://linear.app/settings/api\n```\n\nPowerShell session-only setup:\n\n```powershell\n$env:LINEAR_API_KEY = \"<your-linear-key>\"\n$env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n```\n\nmacOS/Linux shell session-only setup:\n\n```bash\nexport LINEAR_API_KEY=\"<your-linear-key>\"\nexport LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n`LINEAR_DEFAULT_TEAM` is optional. Examples below use `TEAM` and `TEAM-123` as placeholders; replace them with your Linear team key and issue identifiers.\n\n## Run\n\nFrom PowerShell, bash, zsh, or any shell with Node on PATH:\n\n```bash\nnode \"<skill-dir>/scripts/linear.mjs\" help\nnode \"<skill-dir>/scripts/linear.mjs\" viewer\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --limit 10\n```\n\nFrom OpenClaw, use the bundled script directly:\n\n```text\nRun: node <skill-dir>/scripts/linear.mjs my-issues --team TEAM\nRun only after explicit approval: node <skill-dir>/scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submitting credentials.\" --priority high --execute\n```\n\nAdd `--json` to commands when structured output is useful.\n\n## Commands\n\nRead-only:\n\n```text\nhelp\nviewer\norganization\nteams\nprojects [--team TEAM] [--limit N]\nstates <TEAM_KEY>\nissues [--team TEAM] [--mine] [--state STATE] [--limit N]\nmy-issues [--team TEAM] [--state STATE] [--limit N]\nmy-todos [--team TEAM] [--limit N]\nurgent [--team TEAM] [--mine] [--limit N]\nstandup [--team TEAM] [--limit N]\nissue <IDENTIFIER>\nbranch <IDENTIFIER>\n```\n\nWrites to Linear require explicit approval and `--execute`:\n\n```text\nproject-create [TEAM_KEY] \"Name\" [\"Description\"] --execute\ncreate [TEAM_KEY] \"Title\" [\"Description\"] [--priority urgent|high|medium|low|none] --execute\ncomment <IDENTIFIER> \"Comment\" --execute\nstatus <IDENTIFIER> <state-name> --execute\npriority <IDENTIFIER> <urgent|high|medium|low|none> --execute\n```\n\nFor agent use, perform write commands only when the user clearly requested the Linear change or explicitly approved it. Without `--execute`, write commands fail before contacting Linear.\n\n## Examples\n\nList teams, projects, and states:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" teams\nnode \"<skill-dir>/scripts/linear.mjs\" projects --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" states TEAM\n```\n\nCreate a project:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" project-create TEAM \"Release Planning\" \"Track launch scope and milestones.\" --execute\n```\n\nList issues:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --state \"In Progress\"\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" my-todos --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" urgent --team TEAM\n```\n\nRead and update an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issue TEAM-123\nnode \"<skill-dir>/scripts/linear.mjs\" comment TEAM-123 \"Added reproduction notes.\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" status TEAM-123 \"In Progress\" --execute\nnode \"<skill-dir>/scripts/linear.mjs\" priority TEAM-123 urgent --execute\n```\n\nCreate an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" create TEAM \"Fix notification delivery\" \"Notifications are delayed for some users.\" --priority high --execute\n```\n\nGenerate a GitHub-friendly branch name from the Linear issue title:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" branch TEAM-123\n```\n\nGet machine-readable output:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM --json\n```\n\n## Notes\n\n- Prefer issue identifiers like `TEAM-123`; the script resolves them before updates that need Linear IDs.\n- Priority values map to Linear's native values: `urgent`, `high`, `medium`, `low`, `none`.\n- Missing keys, 401/403 responses, GraphQL errors, missing teams/states, and invalid priorities produce clear stderr errors with non-zero exit codes.\n- `standup` summarizes assigned active and recently completed issues; it is intentionally lightweight, not a time tracker.\n\n## Changelog\n\n- `1.0.6`: Package-only cleanup: publish runtime files only (`SKILL.md` and `scripts/linear.mjs`) and keep the local test harness out of the public archive.\n- `1.0.5`: Fix GraphQL variable construction in issue list queries (`issues`, `my-issues`, `my-todos`, `urgent`, `standup`) so only actually used variables are declared and passed.\n\nFile v1.0.8:_meta.json\n\n{\n  \"ownerId\": \"kn78bc0rnqe8pnvd4azdnjvmmd858m3q\",\n  \"slug\": \"linear-native-node\",\n  \"version\": \"1.0.8\",\n  \"publishedAt\": 1778254942932\n}\n\nArchive v1.0.7: 3 files, 8133 bytes\n\nFiles: scripts/linear.mjs (21080b), SKILL.md (5912b), _meta.json (137b)\n\nFile v1.0.7:SKILL.md\n\n---\nname: linear-native-node\ndescription: Direct Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Can write to Linear via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party service.\n---\n\n# Linear Native Node\n\nUse `scripts/linear.mjs` to talk directly to Linear's GraphQL API at `https://api.linear.app/graphql`.\n\nNative Node 18+. Zero npm dependencies. Windows, macOS, and Linux friendly. No bash, Python, OAuth gateway, browser login, or third-party proxy.\n\n## Security behavior\n\n- Reads `LINEAR_API_KEY` and optional `LINEAR_DEFAULT_TEAM` from the process environment only.\n- Does not read credential files or `~/.openclaw/.env`.\n- Sends GraphQL requests only to `https://api.linear.app/graphql`.\n- Does not write files, log secrets, or print the API key.\n- Write commands are explicit commands (`create`, `comment`, `status`, `priority`, `project-create`); read-only commands are the default usage pattern.\n\n\n## Why this skill\n\nThis is the private/direct version of common Linear helper workflows:\n\n- Keeps API access between this machine and Linear only.\n- Uses `LINEAR_API_KEY` from the process environment only; never print the key.\n- Avoids bash-oriented helpers that break on Windows.\n- Avoids third-party OAuth/gateway tools; there is no Maton-style intermediary.\n- Keeps a tight auditable scope: viewer/org/team lookup, issue list/read/create/update/comment, practical personal summaries, and branch names.\n\n## Setup\n\nCreate a Linear API key at:\n\n```text\nhttps://linear.app/settings/api\n```\n\nPowerShell session-only setup:\n\n```powershell\n$env:LINEAR_API_KEY = \"<your-linear-key>\"\n$env:LINEAR_DEFAULT_TEAM = \"TEAM\"\n```\n\nmacOS/Linux shell session-only setup:\n\n```bash\nexport LINEAR_API_KEY=\"<your-linear-key>\"\nexport LINEAR_DEFAULT_TEAM=\"TEAM\"\n```\n`LINEAR_DEFAULT_TEAM` is optional. Examples below use `TEAM` and `TEAM-123` as placeholders; replace them with your Linear team key and issue identifiers.\n\n## Run\n\nFrom PowerShell, bash, zsh, or any shell with Node on PATH:\n\n```bash\nnode \"<skill-dir>/scripts/linear.mjs\" help\nnode \"<skill-dir>/scripts/linear.mjs\" viewer\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --limit 10\n```\n\nFrom OpenClaw, use the bundled script directly:\n\n```text\nRun: node <skill-dir>/scripts/linear.mjs my-issues --team TEAM\nRun: node <skill-dir>/scripts/linear.mjs create TEAM \"Fix login error\" \"Users see an error after submitting credentials.\" --priority high\n```\n\nAdd `--json` to commands when structured output is useful.\n\n## Commands\n\nRead-only:\n\n```text\nhelp\nviewer\norganization\nteams\nprojects [--team TEAM] [--limit N]\nstates <TEAM_KEY>\nissues [--team TEAM] [--mine] [--state STATE] [--limit N]\nmy-issues [--team TEAM] [--state STATE] [--limit N]\nmy-todos [--team TEAM] [--limit N]\nurgent [--team TEAM] [--mine] [--limit N]\nstandup [--team TEAM] [--limit N]\nissue <IDENTIFIER>\nbranch <IDENTIFIER>\n```\n\nWrites to Linear:\n\n```text\nproject-create [TEAM_KEY] \"Name\" [\"Description\"]\ncreate [TEAM_KEY] \"Title\" [\"Description\"] [--priority urgent|high|medium|low|none]\ncomment <IDENTIFIER> \"Comment\"\nstatus <IDENTIFIER> <state-name>\npriority <IDENTIFIER> <urgent|high|medium|low|none>\n```\n\nFor agent use, perform write commands only when the user clearly requested the Linear change or explicitly approved it.\n\n## Examples\n\nList teams, projects, and states:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" teams\nnode \"<skill-dir>/scripts/linear.mjs\" projects --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" states TEAM\n```\n\nCreate a project:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" project-create TEAM \"Release Planning\" \"Track launch scope and milestones.\"\n```\n\nList issues:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --limit 20\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --state \"In Progress\"\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" my-todos --team TEAM\nnode \"<skill-dir>/scripts/linear.mjs\" urgent --team TEAM\n```\n\nRead and update an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" issue TEAM-123\nnode \"<skill-dir>/scripts/linear.mjs\" comment TEAM-123 \"Added reproduction notes.\"\nnode \"<skill-dir>/scripts/linear.mjs\" status TEAM-123 \"In Progress\"\nnode \"<skill-dir>/scripts/linear.mjs\" priority TEAM-123 urgent\n```\n\nCreate an issue:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" create TEAM \"Fix notification delivery\" \"Notifications are delayed for some users.\" --priority high\n```\n\nGenerate a GitHub-friendly branch name from the Linear issue title:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" branch TEAM-123\n```\n\nGet machine-readable output:\n\n```powershell\nnode \"<skill-dir>/scripts/linear.mjs\" my-issues --team TEAM --json\n```\n\n## Notes\n\n- Prefer issue identifiers like `TEAM-123`; the script resolves them before updates that need Linear IDs.\n- Priority values map to Linear's native values: `urgent`, `high`, `medium`, `low`, `none`.\n- Missing keys, 401/403 responses, GraphQL errors, missing teams/states, and invalid priorities produce clear stderr errors with non-zero exit codes.\n- `standup` summarizes assigned active and recently completed issues; it is intentionally lightweight, not a time tracker.\n\n## Changelog\n\n- `1.0.6`: Package-only cleanup: publish runtime files only (`SKILL.md` and `scripts/linear.mjs`) and keep the local test harness out of the public archive.\n- `1.0.5`: Fix GraphQL variable construction in issue list queries (`issues`, `my-issues`, `my-todos`, `urgent`, `standup`) so only actually used variables are declared and passed.\n\nFile v1.0.7:_meta.json\n\n{\n  \"ownerId\": \"kn78bc0rnqe8pnvd4azdnjvmmd858m3q\",\n  \"slug\": \"linear-native-node\",\n  \"version\": \"1.0.7\",\n  \"publishedAt\": 1778164905074\n}","readmeExcerpt":"Skill: linear-native-node Owner: jwestburg Summary: Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Write actions are explicit and approval-gated via create/comment/status/priority/project-create commands. Reads LINEAR_API_","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"https://linear.app/settings/api"},{"language":"powershell","snippet":"$env:LINEAR_API_KEY = \"<your-linear-key>\"\n$env:LINEAR_DEFAULT_TEAM = \"TEAM\""},{"language":"bash","snippet":"export LINEAR_API_KEY=\"<your-linear-key>\"\nexport LINEAR_DEFAULT_TEAM=\"TEAM\""},{"language":"bash","snippet":"node \"<skill-dir>/scripts/linear.mjs\" help\nnode \"<skill-dir>/scripts/linear.mjs\" viewer\nnode \"<skill-dir>/scripts/linear.mjs\" issues --team TEAM --mine --limit 10"},{"language":"text","snippet":"Run: node <skill-dir>/scripts/linear.mjs my-issues --team TEAM\nRun only after explicit approval: node <skill-dir>/scripts/linear.mjs --execute create TEAM \"Fix login error\" \"Users see an error after submitting credentials.\" --priority high"},{"language":"text","snippet":"help\nviewer\norganization\nteams\nprojects [--team TEAM] [--limit N]\nstates <TEAM_KEY>\nissues [--team TEAM] [--mine] [--state STATE] [--limit N]\nmy-issues [--team TEAM] [--state STATE] [--limit N]\nmy-todos [--team TEAM] [--limit N]\nurgent [--team TEAM] [--mine] [--limit N]\nstandup [--team TEAM] [--limit N]\nissue <IDENTIFIER>\nbranch <IDENTIFIER>"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: linear-native-node\ndescription: Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Write actions are explicit and approval-gated via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party intermediary/proxy service.\nversion: 1.0.22\nrisk_class: external-api-read-write-gated\n---\n\n# Linear Native Node\n\nVersion: 1.0.22 / local Linear utility.\n\n\nUse `scripts/linear.mjs` to talk directly to Linear's GraphQL API at `https://api.linear.app/graphql`.\n\nNative Node 18+. Zero npm dependencies. Windows, macOS, and Linux friendly. No bash, Python, OAuth gateway, browser login, or third-party proxy.\n\n## Security behavior\n\n- Reads `LINEAR_API_KEY` and optional `LINEAR_DEFAULT_TEAM` from the process environment only.\n- Does not read credential files or `~/.openclaw/.env`.\n- Sends GraphQL requests only to `https://api.linear.app/graphql`.\n- Does not write local files, log secrets, or print the API key.\n- Linear personal API keys inherit the permissions of the user/account that created them. Treat output as workspace-sensitive; use the least-privileged key model Linear offers if scoped keys become available.\n- Read-only commands are the default usage pattern.\n- Write commands are explicit commands (`create`, `comment`, `status`, `priority`, `project-create`) and are fail-closed by default: the script exits unless `--execute` is present after explicit user approval for that specific Linear mutation.\n- `--execute` is only a script-level flag gate. Mutation appropriateness is enforced by the operator/agent approval policy: do not run a write unless the current user instruction or approval names the Linear action, target, and intended mutation.\n- Static-analysis note: env-var + network-send warnings are expected for this skill because it uses a named API key to call Linear's fixed GraphQL endpoint. Treat any broad env enumeration, dynamic endpoint, or key-printing behavior as a blocker.\n- Read command output may include workspace names, user names, emails, issue titles, issue descriptions, and URLs from the connected Linear workspace. Redact that content before sharing logs or examples externally.\n\n\n## Why this skill\n\nThis is the local/native Node version of common Linear helper workflows:\n\n- Keeps API access between this machine and Linear only.\n- Uses `LINEAR_API_KEY` from the process environment only; never print the key.\n- Avoids bash-oriented helpers that break on Windows.\n- Avoids third-party OAuth/gateway tools or intermediary services.\n- Keeps a tight auditable scope: viewer/org/team lookup, issue list/read/create/update/comment, practical personal summaries, and branch names.\n\n## Setup\n\nCreate a Linear API key at:\n\n```text\nhttps://linear.ap"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn78bc0rnqe8pnvd4azdnjvmmd858m3q\",\n  \"slug\": \"linear-native-node\",\n  \"version\": \"1.0.22\",\n  \"publishedAt\": 1789093617033\n}"},{"path":"skill-card.md","content":"## Description:\n\nLinear Native Node helps agents use Linear's GraphQL API from native Node.js to read workspace data and perform explicitly approved issue, project, comment, status, and priority updates.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[jwestburg](https://clawhub.ai/user/jwestburg)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to query Linear workspace data, summarize assigned work, generate branch names, and perform approved issue or project mutations through the bundled Node script.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill uses a Linear API key whose access follows the connected account's permissions.\n\nMitigation: Use the least-privileged Linear key available and store it only in the process environment for the current session.\n\nRisk: Command output can include workspace-sensitive issue details, URLs, names, or emails.\n\nMitigation: Review and redact Linear output before sharing logs, examples, or summaries externally.\n\nRisk: Approved write commands can mutate Linear issues, comments, priorities, statuses, or projects.\n\nMitigation: Run write commands only when the requested Linear action, target, and intended mutation are explicit, and require the --execute gate.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/jwestburg/skills/linear-native-node)\n- [Linear GraphQL API endpoint](https://api.linear.app/graphql)\n- [Linear API key settings](https://linear.app/settings/api)\n\n## Skill Output:\n\n**Output Type(s):** [Text, JSON, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown guidance with shell commands; runtime output is plain text or JSON.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires LINEAR_API_KEY. Write commands require --execute after explicit approval for the intended Linear mutation.]\n\n## Skill Version(s):\n\n1.0.22 (source: frontmatter and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Write actions are explicit and approval-gated via create/comment/status/priority/project-create commands. Reads LINEAR_API_KEY from the process environment only; no OAuth gateway, bash, Python, npm dependencies, or third-party intermediary/proxy service. Skill: linear-native-node Owner: jwestburg Summary: Linear workspace helper using Linear's GraphQL API from native Node.js. Use when creating, listing, updating, commenting on, summarizing, or looking up Linear issues, projects, teams, workflow states, priorities, standup notes, or branch names. Write actions are explicit and approval-gated via create/comment/status/priority/project-create commands. Reads LINEAR_API_","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1332,"uniquenessScore":45,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T03:53:15.813Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T03:53:15.813Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:45:02.915Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}