Task
Claude + Obsidian knowledge companion. A persistent, compounding wiki vault based on Karpathy's LLM Wiki pattern — drop sources, ask questions, knowledge compounds.
npx -y skills add eliransu/digital-brain --skill taskAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Create a Linear issue via the Linear MCP and mirror it as a local note under `wiki/notes/` so `/sync` and `/sup` surface it. Default assignee is you; override with `@<Person>`. Default cycle is the team's CURRENT sprint; override with `sprint:next` or `sprint:none`. Default team is configured in `wiki/daily/_config.json` (`linear_default_team_key`). Triggers on: "/task", "/digital-brain:task", "add a Linear task", "file a ticket".
SKILL.md
8.7 KB, as published. Nobody here has run it
task: Create a Linear Issue + Mirror in the Vault
/task is the bridge between your local note system and Linear. Every /task invocation produces TWO artifacts:
- A Linear issue — the canonical work item, on the right team and (by default) the current cycle.
- A mirror note in
wiki/notes/withnote_kind: taskand the Linear ID embedded — so the next/sync//suppicks it up alongside reminders.
The mirror means a /task you filed five minutes ago shows up in /sup without needing a /sync first.
User identity: [email protected]. Vault root: ~/digital-brain/.
Invocation Forms
| Form | Action |
|---|---|
/task <title> | new Linear issue, default team, current cycle, assigned to you |
/task <title> @<Person> | assign to that person (resolves via Linear list_users + people index) |
/task <title> sprint:next | put on next cycle instead of current |
/task <title> sprint:none | no cycle |
/task <title> team:<TEAMKEY> | override default team (e.g. team:ENG) |
/task <title> priority:<urgent|high|med|low> | set Linear priority |
/task <title> due:<date> | set due date on the issue |
Multiple modifiers compose: /task ship retro @Alice sprint:current priority:high due:2026-05-20.
If $ARGUMENTS is empty, show the forms and ask which one.
Config
Reads wiki/daily/_config.json. Required keys (created on first run if missing):
{
"linear_default_team_key": "TEAM",
"linear_default_team_id": "<UUID — resolved on first run and cached>"
}
linear_default_team_key is your primary team (currently TEAM based on TEAM-906, TEAM-873, etc.). linear_default_team_id is the resolved UUID, looked up once via list_teams and cached so we don't hit the API every invocation.
Workflow
-
Sweep expired notes first (same rule as
/note: anything past its 7-dayexpiresflips tostatus: expiredand drops out of_index.md). -
Parse
$ARGUMENTS. Extract:title(everything not consumed by a modifier)assignee_handlefrom@<Person>(optional, default = you)cycle_modefromsprint:<...>(defaultcurrent)team_keyfromteam:<...>(default from config)priorityfrompriority:<...>(default = no priority / 0)due_datefromdue:<...>(optional)
-
Resolve team.
- Read
linear_default_team_idfrom config. - If missing OR the user passed
team:<KEY>, callmcp__claude_ai_Linear__list_teams, find the team whosekeymatches (TEAM,ENG, etc.), record its UUID. If user didn't override, write it back to_config.jsonfor future runs.
- Read
-
Resolve assignee.
- If no
@Person: callmcp__claude_ai_Linear__list_usersfiltered byemail: [email protected]. Cache the user ID in config aslinear_user_idif not already there. - If
@<Name>: resolve<Name>viawiki/entities/people/_index.mdto a full name. Then calllist_userswith a name/email filter to find the Linear user. If not found in Linear, fall back to assigning to you AND mention this in the confirmation.
- If no
-
Resolve cycle.
- If
cycle_mode == "none", skip. - Call
mcp__claude_ai_Linear__list_cyclesfiltered byteam.id. Pick:current(default): the cycle wherestartsAt <= now <= endsAt.next: the cycle with the earlieststartsAt > now.<name>: a cycle whose name or number matches.
- If no current cycle exists for the team, warn and proceed with no cycle.
- If
-
Map priority. Linear priorities:
0(no priority),1(urgent),2(high),3(medium),4(low). Map the parsed keyword accordingly. -
Create the Linear issue. Call
mcp__claude_ai_Linear__save_issuewith:team: the resolved team UUIDtitle: the parsed titledescription: short body —Filed via /task on <YYYY-MM-DD HH:MM> by you. Mirror note: wiki/notes/<note_id>.mdassigneeId: resolved assignee UUIDcycleId: resolved cycle UUID (or omit)priority: mapped intdueDate:due_dateif provided (Linear acceptsYYYY-MM-DD)- Capture the response:
identifier(e.g.TEAM-942),url,id.
-
Mirror the issue as a vault note. Reuse the
noteskill's add flow:note_kind: tasktitle: the issue title, prefixed with the Linear identifier — e.g.[TEAM-942] ship BigCustomer retrocreated: nowdue: the issue'sdueDateif set, else cycleendsAt, else today 18:00expires:createddate + 7d (the 7-day vault TTL is independent of the Linear cycle)status: openassignee: resolved full name ormelinear: the issue identifier (e.g.TEAM-942)- Body includes a
[Open in Linear](<url>)link. - File at
wiki/notes/<YYYY-MM-DD>-<HHMM>-<slug>.mdand register inwiki/notes/_index.mdunder Active Tasks.
-
Hot cache. Same rule as
/note: only touchwiki/hot.mdif the mirror'sdueis within 24h. -
Log. Append at TOP of
wiki/log.md:## [YYYY-MM-DD HH:MM] task | <Linear ID> - Title: <title> - Assignee: <name> - Cycle: <cycle name or none> - Team: <team key> - Linear: <url> - Mirror: wiki/notes/<note_id>.md -
Confirm. Print:
Filed [<Linear ID>](<url>) — assignee <name>, <cycle>, priority <p>. Mirror: [[notes/<note_id>]] (vault TTL 7d).
Defaults Summary
| Field | Default |
|---|---|
| Team | linear_default_team_key from config (TEAM) |
| Assignee | you ([email protected]) |
| Cycle / Sprint | Current cycle for the team |
| Priority | No priority (0) |
| Due date | None on Linear; vault mirror gets today 18:00 if unspecified |
| Vault TTL | 7 days (independent of Linear cycle) |
Examples
/task ship BigCustomer retro
- Linear: new issue on
TEAM, current cycle, assigned to you, no priority. - Vault:
wiki/notes/2026-05-13-1430-ship-bigcustomer-retro.mdwithlinear: TEAM-942.
/task review red-team PR @Alice priority:high due:2026-05-15
- Linear: assigned to
Alice Smith(resolved), current cycle, priority High, due 2026-05-15. - Vault: mirror with
assignee: "Alice Smith",due: 2026-05-15 09:00.
/task plan Q3 offsite sprint:next priority:med
- Linear: on
TEAMnext cycle. - Vault: mirror with
due= next cycleendsAt.
/task ship retro sprint:none
- Linear: no cycle.
- Vault: mirror still gets
duedefaulting to today 18:00.
Failure Modes
- Linear MCP not authenticated: stop, print the
gh-style hint to authenticate. Do NOT silently write only the vault note — the source of truth must be Linear. - Team key not found: show the list of available team keys from
list_teamsand ask which one. - Assignee not found in Linear: assign to you and note
assignee resolution failed: <name> — please reassign in Linear. - No current cycle exists: warn and file with no cycle.
Don'ts
- Don't create the vault mirror if the Linear
save_issuecall failed. Linear is the source of truth. - Don't try to invent a cycle name — use what
list_cyclesreturned. - Don't write to
wiki/hot.mdunless the mirror'sdueis within 24h. - Don't reuse a slug if a note with the same
note_idalready exists — append-2etc.