From ai-brain-starter
Ingests recent Linear issues, comments, and status changes from teams or projects into daily vault markdown files. Invoke via /ingest-linear <team-or-project> [--days N] or sync requests.
npx claudepluginhub adelaidasofia/ai-brain-starterThis skill uses the workspace's default tool permissions.
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.
CLI for Linear.app issue tracking: list, create, update, search issues, comments, documents, cycles, projects. JSON output for LLM agents.
Manages Linear issues, projects, and teams using MCP tools, linear CLI, and GraphQL API. Create, update, query issues; handle labels, status, references, and backlogs.
Extracts issues from documents like meeting transcripts or notes and imports them into Linear via interactive workflow with deduplication and preview mode.
Share bugs, ideas, or general feedback.
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:
---
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.