Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Pulls recent Linear issues, comments, and status changes into the vault as queryable markdown. Use when the user says /ingest-linear <team-or-project> [--days N], or asks to ingest, capture, sync, or pull a Linear team or project into the vault. Writes one file per scope per day to External Inputs/Linear/<scope>/<date>.md. Idempotent: re-running on the same day overwrites cleanly. Do NOT use for creating Linear issues, updating status, or non-Linear sources.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | -11% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 91% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 281% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 21% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 12% | 0% |
Ingests recent Linear activity (issues, comments, status changes) into the vault as markdown the graphify pipeline can read and the rest of the AI Brain Starter substrate (decision log, session-close cascade, hooks) can act on.
This is one of a small family of ingestion connectors (slack, linear, gmail). Adding the next external source means writing a new normalizer, not a new architecture.
/ingest-linear <team-or-project> (with or without --days N)Do NOT use for:
linear_createIssue)linear_updateIssue)linear_getTeams, or to a project ID via linear_getProjects. If both match, ask the user which one.linear_searchIssues with the team filter. For a project scope, use linear_getProjectIssues. Apply the day filter client-side, since the MCP search does not always support an updated-since cursor.linear_getComments and history (status/assignee changes) via linear_getIssueHistory.## section per issue, comments and history events as ### sub-sections under the issue).External Inputs/Linear/<scope>/<YYYY-MM-DD>.md.The skill is a thin orchestrator. The actual ingestion runs in Python at ${SKILL_ROOT}/ingest.py. The skill assembles the Linear MCP tool calls, hands the raw payloads to ingest.py, and the script does the normalization, file write, and frontmatter.
When invoked:
--days N (optional, default 7).linear_getTeams. If the scope matches a team key (e.g. ENG) or team name, capture the team ID. If no match, call linear_getProjects and try a project name match.linear_searchIssues with teamId filter and limit: 100. For a project scope, call linear_getProjectIssues with the project ID and limit: 100.now - N days). Filter issues whose updatedAt is older than the cutoff.linear_getComments (limit 50) and linear_getIssueHistory (limit 25).ingest.py as JSON on stdin.ingest.py writes the vault file and prints a summary.The vault file at External Inputs/Linear/<scope>/<YYYY-MM-DD>.md has frontmatter:
yaml--- type: external-input source: linear scope: <team-key-or-project-name> scope_kind: team | project team_id: <uuid or null> project_id: <uuid or null> date_range: <YYYY-MM-DD>..<YYYY-MM-DD> issue_count: <int> comment_count: <int> history_count: <int> ingested_at: <ISO 8601 timestamp> entity_ids: linear: - <ABC-123> - <ABC-124> ---
Body is chronological by issue updatedAt. Each issue is a ## <ABC-123> <title> section with status, assignee, priority, and the issue description. Comments become ### Comment <YYYY-MM-DD HH:MM> <author> sub-sections. History events become ### Status change <YYYY-MM-DD HH:MM> sub-sections.
Re-running /ingest-linear <scope> --days N on the same calendar day overwrites the same vault file. No append. The entity_ids.linear array reflects exactly the issues in the current window.
A successful run produces:
External Inputs/Linear/<scope>/<date>.mdWrote N issue(s), M comment(s), K history event(s) to <path>.If the scope resolves but contains no matching issues in the window, write the file anyway with issue_count: 0 so re-runs are still idempotent and the absence is recorded.
ingest.py does not require the MCP. The MCP calls happen at the orchestration layer. If the LLM cannot reach the MCP, surface that error to the user, do not write a stub file.issue_count: 0.Other measured skills in the registry, with their headline benchmark lift.