@olegkoval/agent-skills 1.8.0 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/.claude-plugin/plugin.json +4 -2
  2. package/.cursor-plugin/index.json +10 -0
  3. package/.kiro/steering/obsidian-pr-sync.md +137 -0
  4. package/.kiro/steering/obsidian-task-rollover.md +180 -0
  5. package/.windsurf/rules/obsidian-pr-sync.md +136 -0
  6. package/.windsurf/rules/obsidian-task-rollover.md +179 -0
  7. package/README.md +4 -2
  8. package/catalog/skills.json +44 -0
  9. package/package.json +1 -1
  10. package/packages/marketing/search-console-indexing-audit/SKILL.md +1 -0
  11. package/packages/marketing/search-console-indexing-audit/adapters/claude/skills/search-console-indexing-audit/SKILL.md +1 -0
  12. package/packages/marketing/search-console-indexing-audit/adapters/cursor/skills/search-console-indexing-audit/SKILL.md +1 -0
  13. package/packages/marketing/viral-launch/SKILL.md +1 -0
  14. package/packages/marketing/viral-launch/adapters/claude/skills/viral-launch/SKILL.md +1 -0
  15. package/packages/marketing/viral-launch/adapters/cursor/skills/viral-launch/SKILL.md +1 -0
  16. package/packages/music/fill-music-player/SKILL.md +1 -0
  17. package/packages/music/fill-music-player/adapters/claude/skills/fill-music-player/SKILL.md +1 -0
  18. package/packages/music/fill-music-player/adapters/cursor/skills/fill-music-player/SKILL.md +1 -0
  19. package/packages/photography/gallery/SKILL.md +1 -0
  20. package/packages/photography/gallery/adapters/claude/skills/gallery/SKILL.md +1 -0
  21. package/packages/photography/gallery/adapters/cursor/skills/gallery/SKILL.md +1 -0
  22. package/packages/software-development/add-to-my-skills/SKILL.md +1 -0
  23. package/packages/software-development/add-to-my-skills/adapters/claude/skills/add-to-my-skills/SKILL.md +1 -0
  24. package/packages/software-development/add-to-my-skills/adapters/cursor/skills/add-to-my-skills/SKILL.md +1 -0
  25. package/packages/software-development/ai-tools-setup/SKILL.md +1 -0
  26. package/packages/software-development/ai-tools-setup/adapters/claude/skills/ai-tools-setup/SKILL.md +1 -0
  27. package/packages/software-development/ai-tools-setup/adapters/cursor/skills/ai-tools-setup/SKILL.md +1 -0
  28. package/packages/software-development/changelog-generator/SKILL.md +1 -0
  29. package/packages/software-development/changelog-generator/adapters/claude/skills/changelog-generator/SKILL.md +1 -0
  30. package/packages/software-development/changelog-generator/adapters/cursor/skills/changelog-generator/SKILL.md +1 -0
  31. package/packages/software-development/cloudflare-block-countries/SKILL.md +1 -0
  32. package/packages/software-development/cloudflare-block-countries/adapters/claude/skills/cloudflare-block-countries/SKILL.md +1 -0
  33. package/packages/software-development/cloudflare-block-countries/adapters/cursor/skills/cloudflare-block-countries/SKILL.md +1 -0
  34. package/packages/software-development/docs-index-keeper/SKILL.md +1 -0
  35. package/packages/software-development/docs-index-keeper/adapters/claude/skills/docs-index-keeper/SKILL.md +1 -0
  36. package/packages/software-development/docs-index-keeper/adapters/cursor/skills/docs-index-keeper/SKILL.md +1 -0
  37. package/packages/software-development/gh-cli/SKILL.md +1 -0
  38. package/packages/software-development/gh-cli/adapters/claude/skills/gh-cli/SKILL.md +1 -0
  39. package/packages/software-development/gh-cli/adapters/cursor/skills/gh-cli/SKILL.md +1 -0
  40. package/packages/software-development/git-commit/SKILL.md +1 -0
  41. package/packages/software-development/git-commit/adapters/claude/skills/git-commit/SKILL.md +1 -0
  42. package/packages/software-development/git-commit/adapters/cursor/skills/git-commit/SKILL.md +1 -0
  43. package/packages/software-development/obsidian-pr-sync/SKILL.md +152 -0
  44. package/packages/software-development/obsidian-pr-sync/adapters/claude/plugin.json +5 -0
  45. package/packages/software-development/obsidian-pr-sync/adapters/claude/skills/obsidian-pr-sync/SKILL.md +155 -0
  46. package/packages/software-development/obsidian-pr-sync/adapters/cursor/plugin.json +6 -0
  47. package/packages/software-development/obsidian-pr-sync/adapters/cursor/skills/obsidian-pr-sync/SKILL.md +155 -0
  48. package/packages/software-development/obsidian-pr-sync/adapters/kiro/steering/obsidian-pr-sync.md +137 -0
  49. package/packages/software-development/obsidian-pr-sync/adapters/windsurf/rules/obsidian-pr-sync.md +136 -0
  50. package/packages/software-development/obsidian-task-rollover/SKILL.md +196 -0
  51. package/packages/software-development/obsidian-task-rollover/adapters/claude/plugin.json +5 -0
  52. package/packages/software-development/obsidian-task-rollover/adapters/claude/skills/obsidian-task-rollover/SKILL.md +199 -0
  53. package/packages/software-development/obsidian-task-rollover/adapters/cursor/plugin.json +6 -0
  54. package/packages/software-development/obsidian-task-rollover/adapters/cursor/skills/obsidian-task-rollover/SKILL.md +199 -0
  55. package/packages/software-development/obsidian-task-rollover/adapters/kiro/steering/obsidian-task-rollover.md +180 -0
  56. package/packages/software-development/obsidian-task-rollover/adapters/windsurf/rules/obsidian-task-rollover.md +179 -0
  57. package/packages/software-development/open-source-publisher/SKILL.md +1 -0
  58. package/packages/software-development/open-source-publisher/adapters/claude/skills/open-source-publisher/SKILL.md +1 -0
  59. package/packages/software-development/open-source-publisher/adapters/cursor/skills/open-source-publisher/SKILL.md +1 -0
  60. package/packages/software-development/product-builder/SKILL.md +1 -0
  61. package/packages/software-development/product-builder/adapters/claude/skills/product-builder/SKILL.md +1 -0
  62. package/packages/software-development/product-builder/adapters/cursor/skills/product-builder/SKILL.md +1 -0
  63. package/packages/software-development/promptctl/SKILL.md +1 -0
  64. package/packages/software-development/promptctl/adapters/claude/skills/promptctl/SKILL.md +1 -0
  65. package/packages/software-development/promptctl/adapters/cursor/skills/promptctl/SKILL.md +1 -0
  66. package/packages/software-development/semantic-release-beta/SKILL.md +1 -0
  67. package/packages/software-development/semantic-release-beta/adapters/claude/skills/semantic-release-beta/SKILL.md +1 -0
  68. package/packages/software-development/semantic-release-beta/adapters/cursor/skills/semantic-release-beta/SKILL.md +1 -0
  69. package/packages/software-development/starter-rules/SKILL.md +1 -0
  70. package/packages/software-development/starter-rules/adapters/claude/skills/starter-rules/SKILL.md +1 -0
  71. package/packages/software-development/starter-rules/adapters/cursor/skills/starter-rules/SKILL.md +1 -0
  72. package/scripts/build-adapters.sh +11 -2
@@ -358,6 +358,50 @@
358
358
  "windsurf",
359
359
  "kiro"
360
360
  ]
361
+ },
362
+ {
363
+ "name": "obsidian-pr-sync",
364
+ "lookupName": "olko:obsidian-pr-sync",
365
+ "category": "software-development",
366
+ "path": "packages/software-development/obsidian-pr-sync",
367
+ "description": "Fetch open GitHub PRs assigned to you or requesting your review, and write a grouped, age-sorted '## PRs to review' section into today's Obsidian daily note. Idempotent — re-running replaces the section.",
368
+ "tags": [
369
+ "github",
370
+ "obsidian",
371
+ "daily-note",
372
+ "pull-requests",
373
+ "productivity",
374
+ "morning-routine"
375
+ ],
376
+ "adapters": [
377
+ "claude",
378
+ "cursor",
379
+ "copilot",
380
+ "windsurf",
381
+ "kiro"
382
+ ]
383
+ },
384
+ {
385
+ "name": "obsidian-task-rollover",
386
+ "lookupName": "olko:obsidian-task-rollover",
387
+ "category": "software-development",
388
+ "path": "packages/software-development/obsidian-task-rollover",
389
+ "description": "Bullet-journal end-of-day task migration: copy unchecked tasks from today's Obsidian daily note to the next workday's note under '## Carried over', and mark them [>] in the source. Skips weekends, idempotent.",
390
+ "tags": [
391
+ "obsidian",
392
+ "daily-note",
393
+ "bullet-journal",
394
+ "productivity",
395
+ "task-rollover",
396
+ "end-of-day"
397
+ ],
398
+ "adapters": [
399
+ "claude",
400
+ "cursor",
401
+ "copilot",
402
+ "windsurf",
403
+ "kiro"
404
+ ]
361
405
  }
362
406
  ]
363
407
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@olegkoval/agent-skills",
3
- "version": "1.8.0",
3
+ "version": "1.9.1",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -6,6 +6,7 @@ license: MIT
6
6
  allowed-tools: Bash, Read, Write
7
7
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools.
8
8
  metadata:
9
+ targets: [_source-only]
9
10
  author: Oleg Koval
10
11
  tags:
11
12
  - seo
@@ -8,6 +8,7 @@ license: MIT
8
8
  allowed-tools: Bash, Read, Write
9
9
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools.
10
10
  metadata:
11
+ targets: ["claude"]
11
12
  author: Oleg Koval
12
13
  tags:
13
14
  - seo
@@ -8,6 +8,7 @@ license: MIT
8
8
  allowed-tools: Bash, Read, Write
9
9
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools.
10
10
  metadata:
11
+ targets: ["cursor"]
11
12
  author: Oleg Koval
12
13
  tags:
13
14
  - seo
@@ -6,6 +6,7 @@ license: MIT
6
6
  allowed-tools: Bash, Read, Write, WebSearch, WebFetch
7
7
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Useful for product repos, open-source packages, SaaS launches, waitlists, and creator tools.
8
8
  metadata:
9
+ targets: [_source-only]
9
10
  author: Oleg Koval
10
11
  tags:
11
12
  - marketing
@@ -8,6 +8,7 @@ license: MIT
8
8
  allowed-tools: Bash, Read, Write, WebSearch, WebFetch
9
9
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Useful for product repos, open-source packages, SaaS launches, waitlists, and creator tools.
10
10
  metadata:
11
+ targets: ["claude"]
11
12
  author: Oleg Koval
12
13
  tags:
13
14
  - marketing
@@ -8,6 +8,7 @@ license: MIT
8
8
  allowed-tools: Bash, Read, Write, WebSearch, WebFetch
9
9
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Useful for product repos, open-source packages, SaaS launches, waitlists, and creator tools.
10
10
  metadata:
11
+ targets: ["cursor"]
11
12
  author: Oleg Koval
12
13
  tags:
13
14
  - marketing
@@ -5,6 +5,7 @@ license: MIT
5
5
  allowed-tools: Bash
6
6
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires shell access and the fill-music-player CLI or underlying script in the target environment.
7
7
  metadata:
8
+ targets: [_source-only]
8
9
  author: Oleg Koval
9
10
  tags:
10
11
  - music
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires shell access and the fill-music-player CLI or underlying script in the target environment.
9
9
  metadata:
10
+ targets: ["claude"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - music
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires shell access and the fill-music-player CLI or underlying script in the target environment.
9
9
  metadata:
10
+ targets: ["cursor"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - music
@@ -5,6 +5,7 @@ license: MIT
5
5
  allowed-tools: Bash, Read, Write, WebSearch, WebFetch
6
6
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a project that contains the gallery scripts and expected data layout.
7
7
  metadata:
8
+ targets: [_source-only]
8
9
  author: Oleg Koval
9
10
  tags:
10
11
  - photos
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash, Read, Write, WebSearch, WebFetch
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a project that contains the gallery scripts and expected data layout.
9
9
  metadata:
10
+ targets: ["claude"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - photos
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash, Read, Write, WebSearch, WebFetch
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a project that contains the gallery scripts and expected data layout.
9
9
  metadata:
10
+ targets: ["cursor"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - photos
@@ -5,6 +5,7 @@ license: MIT
5
5
  allowed-tools: Bash, Read, Write, Edit
6
6
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a writable git repository and access to the source skill repo.
7
7
  metadata:
8
+ targets: [_source-only]
8
9
  author: Oleg Koval
9
10
  tags:
10
11
  - skills
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash, Read, Write, Edit
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a writable git repository and access to the source skill repo.
9
9
  metadata:
10
+ targets: ["claude"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - skills
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash, Read, Write, Edit
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a writable git repository and access to the source skill repo.
9
9
  metadata:
10
+ targets: ["cursor"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - skills
@@ -5,6 +5,7 @@ license: MIT
5
5
  allowed-tools: Bash, Read, Edit, Write
6
6
  compatibility: Claude Code on macOS (Homebrew required)
7
7
  metadata:
8
+ targets: [_source-only]
8
9
  author: Oleg Koval
9
10
  tags:
10
11
  - rtk
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash, Read, Edit, Write
8
8
  compatibility: Claude Code on macOS (Homebrew required)
9
9
  metadata:
10
+ targets: ["claude"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - rtk
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash, Read, Edit, Write
8
8
  compatibility: Claude Code on macOS (Homebrew required)
9
9
  metadata:
10
+ targets: ["cursor"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - rtk
@@ -5,6 +5,7 @@ license: MIT
5
5
  allowed-tools: Bash, Read, Write
6
6
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git history access in the target repository.
7
7
  metadata:
8
+ targets: [_source-only]
8
9
  author: Oleg Koval
9
10
  tags:
10
11
  - changelog
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash, Read, Write
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git history access in the target repository.
9
9
  metadata:
10
+ targets: ["claude"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - changelog
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash, Read, Write
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git history access in the target repository.
9
9
  metadata:
10
+ targets: ["cursor"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - changelog
@@ -5,6 +5,7 @@ license: MIT
5
5
  allowed-tools: Bash
6
6
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires curl and jq.
7
7
  metadata:
8
+ targets: [_source-only]
8
9
  author: Oleg Koval
9
10
  tags:
10
11
  - cloudflare
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires curl and jq.
9
9
  metadata:
10
+ targets: ["claude"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - cloudflare
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires curl and jq.
9
9
  metadata:
10
+ targets: ["cursor"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - cloudflare
@@ -5,6 +5,7 @@ license: MIT
5
5
  allowed-tools: Bash, Read, Write, Edit, Grep, Glob
6
6
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires shell access and Node.js 18+ when installing from npm.
7
7
  metadata:
8
+ targets: [_source-only]
8
9
  author: Oleg Koval
9
10
  package: docs-index-keeper
10
11
  tags:
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash, Read, Write, Edit, Grep, Glob
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires shell access and Node.js 18+ when installing from npm.
9
9
  metadata:
10
+ targets: ["claude"]
10
11
  author: Oleg Koval
11
12
  package: docs-index-keeper
12
13
  tags:
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash, Read, Write, Edit, Grep, Glob
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires shell access and Node.js 18+ when installing from npm.
9
9
  metadata:
10
+ targets: ["cursor"]
10
11
  author: Oleg Koval
11
12
  package: docs-index-keeper
12
13
  tags:
@@ -5,6 +5,7 @@ license: MIT
5
5
  allowed-tools: Bash
6
6
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires the GitHub CLI and valid GitHub authentication.
7
7
  metadata:
8
+ targets: [_source-only]
8
9
  author: Oleg Koval
9
10
  tags:
10
11
  - github
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires the GitHub CLI and valid GitHub authentication.
9
9
  metadata:
10
+ targets: ["claude"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - github
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires the GitHub CLI and valid GitHub authentication.
9
9
  metadata:
10
+ targets: ["cursor"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - github
@@ -5,6 +5,7 @@ license: MIT
5
5
  allowed-tools: Bash
6
6
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git and a writable repository.
7
7
  metadata:
8
+ targets: [_source-only]
8
9
  author: Oleg Koval
9
10
  tags:
10
11
  - git
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git and a writable repository.
9
9
  metadata:
10
+ targets: ["claude"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - git
@@ -7,6 +7,7 @@ license: MIT
7
7
  allowed-tools: Bash
8
8
  compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git and a writable repository.
9
9
  metadata:
10
+ targets: ["cursor"]
10
11
  author: Oleg Koval
11
12
  tags:
12
13
  - git
@@ -0,0 +1,152 @@
1
+ ---
2
+ name: obsidian-pr-sync
3
+ description: >
4
+ Fetch open GitHub PRs where the user is an assignee or review-requested reviewer,
5
+ then write or refresh a "## PRs to review" section in today's Obsidian daily note.
6
+ Use this skill whenever the user asks to sync PRs to Obsidian, update their daily note
7
+ with GitHub reviews, check what PRs need attention, or run a morning PR sync routine.
8
+ Also suitable for scheduled/automated runs — fully idempotent (re-running replaces
9
+ the section, never appends).
10
+ license: MIT
11
+ allowed-tools: Bash, Read, Write, Edit
12
+ compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires the GitHub CLI (`gh`) authenticated and a daily note vault.
13
+ metadata:
14
+ author: Oleg Koval
15
+ tags:
16
+ - github
17
+ - obsidian
18
+ - daily-note
19
+ - pull-requests
20
+ - productivity
21
+ - morning-routine
22
+ ---
23
+
24
+ # Obsidian PR Sync
25
+
26
+ Fetch all open PRs where the user is assigned or requested as reviewer, filter out
27
+ noise (bots, drafts, self-authored), and write a clean grouped section into today's
28
+ daily note.
29
+
30
+ ## Configuration
31
+
32
+ Before running, confirm:
33
+ - `VAULT_DAILY` — absolute path to the daily notes folder (e.g. `/Users/you/obsidian/vault/Lead/Daily`)
34
+ - `GH_USERNAME` — GitHub login to exclude self-authored PRs (e.g. `oleg-koval`)
35
+ - `ORG_PREFIX` — org name to group as "Work" (e.g. `Teifi-Digital`); everything else goes to "Personal"
36
+
37
+ If not specified by the user, infer from context (git config, existing vault files).
38
+
39
+ ## Step 1 — Fetch PRs
40
+
41
+ Run two `gh` queries and merge results, deduplicating by URL:
42
+
43
+ ```bash
44
+ # Review-requested
45
+ gh search prs --review-requested=@me --state=open \
46
+ --json title,url,repository,author,createdAt,isDraft --limit 50
47
+
48
+ # Assigned
49
+ gh search prs --assignee=@me --state=open \
50
+ --json title,url,repository,author,createdAt,isDraft --limit 50
51
+ ```
52
+
53
+ Merge both lists, deduplicate by `url`. The union is what needs attention.
54
+
55
+ ## Step 2 — Filter
56
+
57
+ Discard entries where:
58
+ - `isDraft` is `true`
59
+ - `author.login` matches any bot pattern: `dependabot`, `copilot`, `renovate`, `github-actions`, or `author.is_bot` is `true`
60
+ - `author.login` equals `GH_USERNAME` — self-authored PRs are not reviews; they're your own work
61
+
62
+ ## Step 3 — Enrich authors
63
+
64
+ For each unique author login, resolve a display name for the Obsidian wiki-link:
65
+
66
+ ```bash
67
+ gh api /users/<login> --jq '.name // .login'
68
+ ```
69
+
70
+ If the API returns a name, use it (e.g. `Rutger Klaassen`). If it returns null, fall
71
+ back to the login with first letter uppercased. This gives `[[Rutger Klaassen]]` or
72
+ `[[Merlijnmacgillavry]]`.
73
+
74
+ Batch these lookups — run them in parallel if possible to keep the sync fast.
75
+
76
+ ## Step 4 — Calculate age
77
+
78
+ For each PR: `days_old = (today - createdAt).days`. Use today's date in local time.
79
+
80
+ ## Step 5 — Build the section
81
+
82
+ Format the section exactly as:
83
+
84
+ ```markdown
85
+ ## PRs to review
86
+
87
+ ### Work (<ORG_PREFIX>)
88
+ - [ ] [TITLE](url) by [[Author Name]] (N days old)
89
+
90
+ ### Personal
91
+ - [ ] [TITLE](url) by [[Author Name]] (N days old)
92
+ ```
93
+
94
+ Rules:
95
+ - **Work**: `repository.nameWithOwner` starts with `<ORG_PREFIX>/`
96
+ - **Personal**: everything else
97
+ - Within each group, sort by `createdAt` ascending (oldest first — most overdue at top)
98
+ - If a group has no PRs, omit that subsection entirely (don't render an empty `### Work` header)
99
+ - If there are zero PRs total, write: `## PRs to review\n\n_No open PRs — clear queue! 🎉_`
100
+ - Add `⚠️` after the age if `days_old >= 7`
101
+
102
+ **Example line:**
103
+ ```
104
+ - [ ] [RSL-108] Image sync from InRiver by [[Merlijn Mac Gillavry]] (12 days old ⚠️)
105
+ ```
106
+
107
+ ## Step 6 — Write to today's daily note
108
+
109
+ **Find today's note:**
110
+ ```bash
111
+ TODAY=$(date +%Y-%m-%d)
112
+ NOTE="${VAULT_DAILY}/${TODAY}.md"
113
+ ```
114
+
115
+ If the file doesn't exist, create it with standard daily template frontmatter first,
116
+ then append the section. If the file exists:
117
+
118
+ **Replacement logic (idempotent):**
119
+ - If `## PRs to review` already exists: replace everything from that line up to (but not
120
+ including) the next `## ` heading or end-of-file with the newly built section.
121
+ - If it doesn't exist: append the section at the end of the file (before the nav footer
122
+ line `*← [[...` if present, otherwise at the very end).
123
+
124
+ This ensures re-running the skill produces the same result, not a growing list.
125
+
126
+ ## Invocation patterns
127
+
128
+ **Manual (user-triggered):**
129
+ The user says something like "sync my PRs to today's note" or "update obsidian with my reviews".
130
+ Run the full flow and confirm how many PRs were written.
131
+
132
+ **Scheduled morning routine:**
133
+ Same flow. No user prompt needed — just run, update the note, and report a one-line
134
+ summary: `"PR sync: 3 work PRs, 2 personal PRs written to 2026-05-11.md"`.
135
+
136
+ **In a remote CCR agent:**
137
+ Clone the vault repo, run the sync, commit and push. The local Obsidian Git plugin
138
+ pulls the changes automatically.
139
+
140
+ ## Output to user
141
+
142
+ After writing the file, show a brief confirmation:
143
+
144
+ ```
145
+ Synced N PRs to Lead/Daily/YYYY-MM-DD.md
146
+ Work (<ORG_PREFIX>): X PRs
147
+ Personal: Y PRs
148
+ Skipped: Z bots/drafts
149
+ ```
150
+
151
+ If any `gh` call fails (e.g. auth expired), surface the error clearly rather than
152
+ writing a partial/corrupt section.
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "olko-obsidian-pr-sync",
3
+ "description": "Fetch open GitHub PRs assigned to you or requesting your review, and write a grouped, age-sorted '## PRs to review' section into today's Obsidian daily note. Idempotent — re-running replaces the section.",
4
+ "skills": "./skills"
5
+ }