@hasna/skills 0.0.2 → 0.0.3
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.
- package/bin/index.js +253 -715
- package/bin/mcp.js +221 -683
- package/package.json +1 -1
- package/src/cli/cli.test.ts +14 -14
- package/src/cli/index.tsx +1 -1
- package/src/lib/installer.test.ts +41 -41
- package/src/lib/registry.test.ts +10 -10
- package/src/lib/registry.ts +10 -472
- package/src/lib/skillinfo.test.ts +12 -12
- package/src/mcp/index.ts +1 -1
- package/skills/skill-architecture-docs/CLAUDE.md +0 -19
- package/skills/skill-architecture-docs/package.json +0 -32
- package/skills/skill-architecture-docs/src/index.ts +0 -543
- package/skills/skill-auto-format/CLAUDE.md +0 -19
- package/skills/skill-auto-format/package.json +0 -32
- package/skills/skill-auto-format/src/index.ts +0 -103
- package/skills/skill-auto-format/tsconfig.json +0 -14
- package/skills/skill-brainstorm/README.md +0 -17
- package/skills/skill-brainstorm/install.sh +0 -112
- package/skills/skill-brainstorm/src/auth.ts +0 -49
- package/skills/skill-brainstorm/src/installer.ts +0 -324
- package/skills/skill-brainstorm/src/skill-install.ts +0 -205
- package/skills/skill-browser-agent/CLAUDE.md +0 -19
- package/skills/skill-browser-agent/package.json +0 -32
- package/skills/skill-browser-agent/src/index.ts +0 -626
- package/skills/skill-browser-agent/tsconfig.json +0 -14
- package/skills/skill-browseruse/LICENSE +0 -21
- package/skills/skill-browseruse/README.md +0 -27
- package/skills/skill-browseruse/SKILL.md +0 -113
- package/skills/skill-browseruse/install.sh +0 -112
- package/skills/skill-browseruse/package.json +0 -31
- package/skills/skill-browseruse/src/auth.ts +0 -49
- package/skills/skill-browseruse/src/installer.ts +0 -324
- package/skills/skill-browseruse/src/skill-install.ts +0 -174
- package/skills/skill-calculate/LICENSE +0 -21
- package/skills/skill-calculate/README.md +0 -17
- package/skills/skill-calculate/install.sh +0 -112
- package/skills/skill-calculate/package.json +0 -31
- package/skills/skill-calculate/src/auth.ts +0 -49
- package/skills/skill-calculate/src/installer.ts +0 -324
- package/skills/skill-calculate/src/skill-install.ts +0 -205
- package/skills/skill-chromedevtools/LICENSE +0 -21
- package/skills/skill-chromedevtools/README.md +0 -27
- package/skills/skill-chromedevtools/SKILL.md +0 -110
- package/skills/skill-chromedevtools/install.sh +0 -112
- package/skills/skill-chromedevtools/package.json +0 -31
- package/skills/skill-chromedevtools/src/auth.ts +0 -49
- package/skills/skill-chromedevtools/src/installer.ts +0 -324
- package/skills/skill-chromedevtools/src/skill-install.ts +0 -174
- package/skills/skill-companyguide/LICENSE +0 -21
- package/skills/skill-companyguide/README.md +0 -17
- package/skills/skill-companyguide/install.sh +0 -112
- package/skills/skill-companyguide/package.json +0 -31
- package/skills/skill-companyguide/src/auth.ts +0 -49
- package/skills/skill-companyguide/src/installer.ts +0 -324
- package/skills/skill-companyguide/src/skill-install.ts +0 -205
- package/skills/skill-compose-gmail/tsconfig.json +0 -14
- package/skills/skill-context7/LICENSE +0 -21
- package/skills/skill-context7/README.md +0 -27
- package/skills/skill-context7/SKILL.md +0 -103
- package/skills/skill-context7/install.sh +0 -112
- package/skills/skill-context7/package.json +0 -31
- package/skills/skill-context7/src/auth.ts +0 -49
- package/skills/skill-context7/src/installer.ts +0 -324
- package/skills/skill-context7/src/skill-install.ts +0 -174
- package/skills/skill-crawl/LICENSE +0 -21
- package/skills/skill-crawl/README.md +0 -17
- package/skills/skill-crawl/install.sh +0 -112
- package/skills/skill-crawl/package.json +0 -31
- package/skills/skill-crawl/src/auth.ts +0 -49
- package/skills/skill-crawl/src/installer.ts +0 -324
- package/skills/skill-crawl/src/skill-install.ts +0 -205
- package/skills/skill-csv-transformer/CLAUDE.md +0 -19
- package/skills/skill-csv-transformer/package.json +0 -32
- package/skills/skill-csv-transformer/src/index.ts +0 -81
- package/skills/skill-csv-transformer/tsconfig.json +0 -14
- package/skills/skill-debug/LICENSE +0 -21
- package/skills/skill-debug/README.md +0 -17
- package/skills/skill-debug/install.sh +0 -112
- package/skills/skill-debug/package.json +0 -31
- package/skills/skill-debug/src/auth.ts +0 -49
- package/skills/skill-debug/src/installer.ts +0 -324
- package/skills/skill-debug/src/skill-install.ts +0 -205
- package/skills/skill-deep-research/CLAUDE.md +0 -19
- package/skills/skill-deep-research/package.json +0 -32
- package/skills/skill-deep-research/src/index.ts +0 -1149
- package/skills/skill-deep-research/tsconfig.json +0 -14
- package/skills/skill-dns-manager/CLAUDE.md +0 -19
- package/skills/skill-dns-manager/package.json +0 -32
- package/skills/skill-dns-manager/src/index.ts +0 -92
- package/skills/skill-dns-manager/tsconfig.json +0 -14
- package/skills/skill-download/LICENSE +0 -21
- package/skills/skill-download/README.md +0 -17
- package/skills/skill-download/install.sh +0 -112
- package/skills/skill-download/package.json +0 -31
- package/skills/skill-download/src/auth.ts +0 -49
- package/skills/skill-download/src/installer.ts +0 -324
- package/skills/skill-download/src/skill-install.ts +0 -205
- package/skills/skill-exa/LICENSE +0 -21
- package/skills/skill-exa/README.md +0 -26
- package/skills/skill-exa/SKILL.md +0 -92
- package/skills/skill-exa/install.sh +0 -112
- package/skills/skill-exa/package.json +0 -31
- package/skills/skill-exa/src/auth.ts +0 -49
- package/skills/skill-exa/src/installer.ts +0 -324
- package/skills/skill-exa/src/skill-install.ts +0 -174
- package/skills/skill-filesearch/LICENSE +0 -21
- package/skills/skill-filesearch/README.md +0 -17
- package/skills/skill-filesearch/install.sh +0 -112
- package/skills/skill-filesearch/package.json +0 -31
- package/skills/skill-filesearch/src/auth.ts +0 -49
- package/skills/skill-filesearch/src/installer.ts +0 -324
- package/skills/skill-filesearch/src/skill-install.ts +0 -205
- package/skills/skill-fill/LICENSE +0 -21
- package/skills/skill-fill/README.md +0 -17
- package/skills/skill-fill/install.sh +0 -112
- package/skills/skill-fill/package.json +0 -31
- package/skills/skill-fill/src/auth.ts +0 -49
- package/skills/skill-fill/src/installer.ts +0 -324
- package/skills/skill-fill/src/skill-install.ts +0 -205
- package/skills/skill-generate-audio/CLAUDE.md +0 -3
- package/skills/skill-generate-audio/SKILL.md +0 -53
- package/skills/skill-generate-audio/package.json +0 -30
- package/skills/skill-generate-audio/src/index.ts +0 -656
- package/skills/skill-generate-audio/tsconfig.json +0 -18
- package/skills/skill-generate-readme/CLAUDE.md +0 -19
- package/skills/skill-generate-readme/package.json +0 -32
- package/skills/skill-generate-readme/src/index.ts +0 -867
- package/skills/skill-generate-readme/tsconfig.json +0 -14
- package/skills/skill-generate-slides/CLAUDE.md +0 -19
- package/skills/skill-generate-slides/package.json +0 -32
- package/skills/skill-generate-slides/src/ai.ts +0 -140
- package/skills/skill-generate-slides/src/cli.ts +0 -161
- package/skills/skill-generate-slides/src/export.ts +0 -65
- package/skills/skill-generate-slides/src/index.ts +0 -1417
- package/skills/skill-generate-slides/src/layout.ts +0 -31
- package/skills/skill-generate-slides/src/parse.ts +0 -282
- package/skills/skill-generate-slides/src/render.ts +0 -711
- package/skills/skill-generate-slides/tsconfig.json +0 -14
- package/skills/skill-get-api-docs/CLAUDE.md +0 -19
- package/skills/skill-get-api-docs/package.json +0 -32
- package/skills/skill-get-api-docs/src/index.ts +0 -1176
- package/skills/skill-get-api-docs/tsconfig.json +0 -14
- package/skills/skill-googledrive/LICENSE +0 -21
- package/skills/skill-googledrive/README.md +0 -27
- package/skills/skill-googledrive/SKILL.md +0 -140
- package/skills/skill-googledrive/install.sh +0 -112
- package/skills/skill-googledrive/package.json +0 -31
- package/skills/skill-googledrive/src/auth.ts +0 -49
- package/skills/skill-googledrive/src/installer.ts +0 -324
- package/skills/skill-googledrive/src/skill-install.ts +0 -174
- package/skills/skill-grant-compliance-scanner/CLAUDE.md +0 -19
- package/skills/skill-grant-compliance-scanner/package.json +0 -32
- package/skills/skill-grant-compliance-scanner/src/index.ts +0 -94
- package/skills/skill-grant-compliance-scanner/tsconfig.json +0 -14
- package/skills/skill-hubsearch/LICENSE +0 -21
- package/skills/skill-hubsearch/README.md +0 -17
- package/skills/skill-hubsearch/install.sh +0 -112
- package/skills/skill-hubsearch/package.json +0 -31
- package/skills/skill-hubsearch/src/auth.ts +0 -49
- package/skills/skill-hubsearch/src/installer.ts +0 -324
- package/skills/skill-hubsearch/src/skill-install.ts +0 -205
- package/skills/skill-implementation-architecture/CLAUDE.md +0 -19
- package/skills/skill-implementation-architecture/package.json +0 -32
- package/skills/skill-implementation-architecture/src/index.ts +0 -460
- package/skills/skill-implementation-architecture/tsconfig.json +0 -14
- package/skills/skill-implementation-audit/CLAUDE.md +0 -19
- package/skills/skill-implementation-audit/package.json +0 -32
- package/skills/skill-implementation-audit/src/index.ts +0 -502
- package/skills/skill-implementation-audit/tsconfig.json +0 -14
- package/skills/skill-implementation-cost/CLAUDE.md +0 -19
- package/skills/skill-implementation-cost/package.json +0 -32
- package/skills/skill-implementation-cost/src/index.ts +0 -873
- package/skills/skill-implementation-cost/tsconfig.json +0 -14
- package/skills/skill-implementation-dispatch/CLAUDE.md +0 -19
- package/skills/skill-implementation-dispatch/package.json +0 -32
- package/skills/skill-implementation-dispatch/src/index.ts +0 -390
- package/skills/skill-implementation-dispatch/tsconfig.json +0 -14
- package/skills/skill-implementation-hook/CLAUDE.md +0 -19
- package/skills/skill-implementation-hook/package.json +0 -32
- package/skills/skill-implementation-hook/src/index.ts +0 -787
- package/skills/skill-implementation-hook/tsconfig.json +0 -14
- package/skills/skill-implementation-index/CLAUDE.md +0 -19
- package/skills/skill-implementation-index/package.json +0 -32
- package/skills/skill-implementation-index/src/index.ts +0 -767
- package/skills/skill-implementation-index/tsconfig.json +0 -14
- package/skills/skill-implementation-init/CLAUDE.md +0 -19
- package/skills/skill-implementation-init/package.json +0 -32
- package/skills/skill-implementation-init/src/index.ts +0 -378
- package/skills/skill-implementation-init/tsconfig.json +0 -14
- package/skills/skill-implementation-memento/CLAUDE.md +0 -19
- package/skills/skill-implementation-memento/package.json +0 -32
- package/skills/skill-implementation-memento/src/index.ts +0 -442
- package/skills/skill-implementation-memento/tsconfig.json +0 -14
- package/skills/skill-linear/LICENSE +0 -21
- package/skills/skill-linear/README.md +0 -28
- package/skills/skill-linear/SKILL.md +0 -94
- package/skills/skill-linear/install.sh +0 -112
- package/skills/skill-linear/package.json +0 -31
- package/skills/skill-linear/src/auth.ts +0 -49
- package/skills/skill-linear/src/installer.ts +0 -324
- package/skills/skill-linear/src/skill-install.ts +0 -174
- package/skills/skill-mail/LICENSE +0 -21
- package/skills/skill-mail/README.md +0 -17
- package/skills/skill-mail/install.sh +0 -112
- package/skills/skill-mail/package.json +0 -31
- package/skills/skill-mail/src/auth.ts +0 -49
- package/skills/skill-mail/src/installer.ts +0 -324
- package/skills/skill-mail/src/skill-install.ts +0 -205
- package/skills/skill-manage-gmail/CLAUDE.md +0 -19
- package/skills/skill-manage-gmail/package.json +0 -32
- package/skills/skill-manage-gmail/src/index.ts +0 -504
- package/skills/skill-manage-gmail/tsconfig.json +0 -14
- package/skills/skill-merch-mockup-factory/CLAUDE.md +0 -19
- package/skills/skill-merch-mockup-factory/package.json +0 -32
- package/skills/skill-merch-mockup-factory/src/index.ts +0 -296
- package/skills/skill-merch-mockup-factory/tsconfig.json +0 -14
- package/skills/skill-message/LICENSE +0 -21
- package/skills/skill-message/README.md +0 -17
- package/skills/skill-message/install.sh +0 -112
- package/skills/skill-message/package.json +0 -31
- package/skills/skill-message/src/auth.ts +0 -49
- package/skills/skill-message/src/installer.ts +0 -324
- package/skills/skill-message/src/skill-install.ts +0 -205
- package/skills/skill-newsletter-campaign-planner/CLAUDE.md +0 -19
- package/skills/skill-newsletter-campaign-planner/package.json +0 -32
- package/skills/skill-newsletter-campaign-planner/src/index.ts +0 -252
- package/skills/skill-newsletter-campaign-planner/tsconfig.json +0 -14
- package/skills/skill-notify/LICENSE +0 -21
- package/skills/skill-notify/README.md +0 -17
- package/skills/skill-notify/install.sh +0 -112
- package/skills/skill-notify/package.json +0 -31
- package/skills/skill-notify/src/auth.ts +0 -49
- package/skills/skill-notify/src/installer.ts +0 -324
- package/skills/skill-notify/src/skill-install.ts +0 -205
- package/skills/skill-notion/LICENSE +0 -21
- package/skills/skill-notion/README.md +0 -27
- package/skills/skill-notion/SKILL.md +0 -115
- package/skills/skill-notion/install.sh +0 -112
- package/skills/skill-notion/package.json +0 -31
- package/skills/skill-notion/src/auth.ts +0 -49
- package/skills/skill-notion/src/installer.ts +0 -324
- package/skills/skill-notion/src/skill-install.ts +0 -174
- package/skills/skill-parse-pdf/CLAUDE.md +0 -19
- package/skills/skill-parse-pdf/package.json +0 -32
- package/skills/skill-parse-pdf/src/index.ts +0 -581
- package/skills/skill-parse-pdf/tsconfig.json +0 -14
- package/skills/skill-playwright/LICENSE +0 -21
- package/skills/skill-playwright/README.md +0 -27
- package/skills/skill-playwright/SKILL.md +0 -116
- package/skills/skill-playwright/install.sh +0 -112
- package/skills/skill-playwright/package.json +0 -31
- package/skills/skill-playwright/src/auth.ts +0 -49
- package/skills/skill-playwright/src/installer.ts +0 -324
- package/skills/skill-playwright/src/skill-install.ts +0 -174
- package/skills/skill-projectbuild/LICENSE +0 -21
- package/skills/skill-projectbuild/README.md +0 -17
- package/skills/skill-projectbuild/install.sh +0 -112
- package/skills/skill-projectbuild/package.json +0 -31
- package/skills/skill-projectbuild/src/auth.ts +0 -49
- package/skills/skill-projectbuild/src/installer.ts +0 -324
- package/skills/skill-projectbuild/src/skill-install.ts +0 -205
- package/skills/skill-read-gmail/CLAUDE.md +0 -19
- package/skills/skill-read-gmail/package.json +0 -32
- package/skills/skill-read-gmail/src/index.ts +0 -343
- package/skills/skill-read-gmail/tsconfig.json +0 -14
- package/skills/skill-remember/LICENSE +0 -21
- package/skills/skill-remember/README.md +0 -17
- package/skills/skill-remember/install.sh +0 -112
- package/skills/skill-remember/package.json +0 -31
- package/skills/skill-remember/src/auth.ts +0 -49
- package/skills/skill-remember/src/installer.ts +0 -324
- package/skills/skill-remember/src/skill-install.ts +0 -205
- package/skills/skill-schedule/README.md +0 -17
- package/skills/skill-schedule/install.sh +0 -112
- package/skills/skill-schedule/src/auth.ts +0 -49
- package/skills/skill-schedule/src/installer.ts +0 -324
- package/skills/skill-schedule/src/skill-install.ts +0 -205
- package/skills/skill-search/LICENSE +0 -21
- package/skills/skill-search/README.md +0 -17
- package/skills/skill-search/install.sh +0 -112
- package/skills/skill-search/package.json +0 -31
- package/skills/skill-search/src/auth.ts +0 -49
- package/skills/skill-search/src/installer.ts +0 -324
- package/skills/skill-search/src/skill-install.ts +0 -205
- package/skills/skill-shadcn/LICENSE +0 -21
- package/skills/skill-shadcn/README.md +0 -27
- package/skills/skill-shadcn/SKILL.md +0 -113
- package/skills/skill-shadcn/install.sh +0 -112
- package/skills/skill-shadcn/package.json +0 -31
- package/skills/skill-shadcn/src/auth.ts +0 -49
- package/skills/skill-shadcn/src/installer.ts +0 -324
- package/skills/skill-shadcn/src/skill-install.ts +0 -174
- package/skills/skill-shadcn-theme/CLAUDE.md +0 -19
- package/skills/skill-shadcn-theme/package.json +0 -32
- package/skills/skill-shadcn-theme/src/index.ts +0 -16
- package/skills/skill-shadcn-theme/tsconfig.json +0 -14
- package/skills/skill-social-template-kit/CLAUDE.md +0 -19
- package/skills/skill-social-template-kit/package.json +0 -32
- package/skills/skill-social-template-kit/src/index.ts +0 -303
- package/skills/skill-social-template-kit/tsconfig.json +0 -14
- package/skills/skill-summarize/LICENSE +0 -21
- package/skills/skill-summarize/README.md +0 -17
- package/skills/skill-summarize/install.sh +0 -112
- package/skills/skill-summarize/package.json +0 -31
- package/skills/skill-summarize/src/auth.ts +0 -49
- package/skills/skill-summarize/src/installer.ts +0 -324
- package/skills/skill-summarize/src/skill-install.ts +0 -205
- package/skills/skill-sync/LICENSE +0 -21
- package/skills/skill-sync/README.md +0 -17
- package/skills/skill-sync/install.sh +0 -112
- package/skills/skill-sync/package.json +0 -31
- package/skills/skill-sync/src/auth.ts +0 -49
- package/skills/skill-sync/src/installer.ts +0 -324
- package/skills/skill-sync/src/skill-install.ts +0 -205
- package/skills/skill-time-blocking-orchestrator/CLAUDE.md +0 -19
- package/skills/skill-time-blocking-orchestrator/package.json +0 -32
- package/skills/skill-time-blocking-orchestrator/src/index.ts +0 -328
- package/skills/skill-time-blocking-orchestrator/tsconfig.json +0 -14
- package/skills/skill-transform/.env.example +0 -2
- package/skills/skill-transform/LICENSE +0 -21
- package/skills/skill-transform/README.md +0 -17
- package/skills/skill-transform/SKILL.md +0 -127
- package/skills/skill-transform/install.sh +0 -112
- package/skills/skill-transform/package.json +0 -37
- package/skills/skill-transform/src/auth.ts +0 -49
- package/skills/skill-transform/src/http-client.ts +0 -128
- package/skills/skill-transform/src/index-http.ts +0 -111
- package/skills/skill-transform/src/index-local.ts +0 -368
- package/skills/skill-transform/src/index.ts +0 -111
- package/skills/skill-transform/src/installer.ts +0 -324
- package/skills/skill-transform/src/skill-install.ts +0 -205
- package/skills/skill-transform/src/transformers/ai-transformer.ts +0 -202
- package/skills/skill-transform/src/transformers/format-detector.ts +0 -147
- package/skills/skill-transform/src/types.ts +0 -95
- package/skills/skill-transform/tsconfig.json +0 -18
- package/skills/skill-translate/LICENSE +0 -21
- package/skills/skill-translate/README.md +0 -17
- package/skills/skill-translate/install.sh +0 -112
- package/skills/skill-translate/package.json +0 -31
- package/skills/skill-translate/src/auth.ts +0 -49
- package/skills/skill-translate/src/installer.ts +0 -324
- package/skills/skill-translate/src/skill-install.ts +0 -205
- package/skills/skill-vendor-comparison-coach/CLAUDE.md +0 -19
- package/skills/skill-vendor-comparison-coach/package.json +0 -32
- package/skills/skill-vendor-comparison-coach/src/index.ts +0 -337
- package/skills/skill-vendor-comparison-coach/tsconfig.json +0 -14
- package/skills/skill-videodownload/.env.example +0 -5
- package/skills/skill-videodownload/CLAUDE.md +0 -64
- package/skills/skill-videodownload/LICENSE +0 -21
- package/skills/skill-videodownload/README.md +0 -166
- package/skills/skill-videodownload/package.json +0 -49
- package/skills/skill-videodownload/src/commands/config.ts +0 -89
- package/skills/skill-videodownload/src/commands/download.ts +0 -61
- package/skills/skill-videodownload/src/commands/info.ts +0 -83
- package/skills/skill-videodownload/src/commands/list.ts +0 -84
- package/skills/skill-videodownload/src/lib/downloader.ts +0 -270
- package/skills/skill-videodownload/src/lib/storage.ts +0 -167
- package/skills/skill-videodownload/src/types/index.ts +0 -64
- package/skills/skill-videodownload/src/utils/logger.ts +0 -49
- package/skills/skill-videodownload/src/utils/paths.ts +0 -94
- package/skills/skill-videodownload/tsconfig.json +0 -17
- package/skills/skill-voiceover/.env.example +0 -5
- package/skills/skill-voiceover/CLAUDE.md +0 -40
- package/skills/skill-voiceover/LICENSE +0 -21
- package/skills/skill-voiceover/README.md +0 -64
- package/skills/skill-voiceover/package.json +0 -43
- package/skills/skill-voiceover/src/commands/config.ts +0 -38
- package/skills/skill-voiceover/src/commands/generate.ts +0 -37
- package/skills/skill-voiceover/src/commands/voices.ts +0 -33
- package/skills/skill-voiceover/src/lib/generator.ts +0 -159
- package/skills/skill-voiceover/src/lib/storage.ts +0 -55
- package/skills/skill-voiceover/src/types/index.ts +0 -55
- package/skills/skill-voiceover/src/utils/logger.ts +0 -30
- package/skills/skill-voiceover/src/utils/paths.ts +0 -22
- package/skills/skill-voiceover/tsconfig.json +0 -17
- package/skills/skill-websearch/LICENSE +0 -21
- package/skills/skill-websearch/README.md +0 -17
- package/skills/skill-websearch/install.sh +0 -112
- package/skills/skill-websearch/package.json +0 -31
- package/skills/skill-websearch/src/auth.ts +0 -49
- package/skills/skill-websearch/src/installer.ts +0 -324
- package/skills/skill-websearch/src/skill-install.ts +0 -205
- /package/skills/{skill-compose-gmail → skill-gmail}/CLAUDE.md +0 -0
- /package/skills/{skill-compose-gmail → skill-gmail}/package.json +0 -0
- /package/skills/{skill-compose-gmail → skill-gmail}/src/index.ts +0 -0
- /package/skills/{skill-architecture-docs → skill-gmail}/tsconfig.json +0 -0
|
@@ -1,442 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import * as fs from "fs";
|
|
4
|
-
import * as path from "path";
|
|
5
|
-
import minimist from "minimist";
|
|
6
|
-
|
|
7
|
-
// Types
|
|
8
|
-
interface MementoSection {
|
|
9
|
-
heading: string;
|
|
10
|
-
content: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
interface MementoJsonData {
|
|
14
|
-
context?: string;
|
|
15
|
-
sections?: MementoSection[];
|
|
16
|
-
codeSnippets?: { language?: string; filename?: string; code: string }[];
|
|
17
|
-
keyPoints?: string[];
|
|
18
|
-
decisions?: { decision: string; rationale?: string }[];
|
|
19
|
-
links?: string[];
|
|
20
|
-
nextSteps?: string[];
|
|
21
|
-
notes?: string;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
interface MementoData {
|
|
25
|
-
id: string;
|
|
26
|
-
slug: string;
|
|
27
|
-
title: string;
|
|
28
|
-
content: string;
|
|
29
|
-
category: "code" | "decision" | "context" | "note" | "research";
|
|
30
|
-
tags: string[];
|
|
31
|
-
related: string[];
|
|
32
|
-
created: string;
|
|
33
|
-
updated: string;
|
|
34
|
-
jsonData?: MementoJsonData;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Parse command line arguments
|
|
38
|
-
const args = minimist(process.argv.slice(2), {
|
|
39
|
-
string: ["slug", "category", "content", "tags", "related", "data"],
|
|
40
|
-
boolean: ["no-index", "help"],
|
|
41
|
-
default: {
|
|
42
|
-
category: "note",
|
|
43
|
-
"no-index": false,
|
|
44
|
-
},
|
|
45
|
-
alias: {
|
|
46
|
-
s: "slug",
|
|
47
|
-
c: "content",
|
|
48
|
-
t: "tags",
|
|
49
|
-
r: "related",
|
|
50
|
-
d: "data",
|
|
51
|
-
h: "help",
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
// Show help
|
|
56
|
-
if (args.help) {
|
|
57
|
-
console.log(`
|
|
58
|
-
Implementation Memento - Create memento files for capturing notes and context
|
|
59
|
-
|
|
60
|
-
Usage:
|
|
61
|
-
skills run implementation-memento -- "<title>" [options]
|
|
62
|
-
|
|
63
|
-
Options:
|
|
64
|
-
-s, --slug <name> Slug name for the memento file (required)
|
|
65
|
-
--category <type> Category: code, decision, context, note, research (default: note)
|
|
66
|
-
-c, --content <text> Additional content/body for the memento
|
|
67
|
-
-t, --tags <tags> Comma-separated tags
|
|
68
|
-
-r, --related <ids> Related memento/todo/plan IDs (comma-separated)
|
|
69
|
-
-d, --data <json> JSON data with sections, code snippets, etc.
|
|
70
|
-
--no-index Skip updating MEMENTOS.md index
|
|
71
|
-
-h, --help Show this help
|
|
72
|
-
|
|
73
|
-
JSON Data Format (--data):
|
|
74
|
-
{
|
|
75
|
-
"context": "Background context for this memento",
|
|
76
|
-
"sections": [
|
|
77
|
-
{ "heading": "Overview", "content": "Section content here" },
|
|
78
|
-
{ "heading": "Details", "content": "More details" }
|
|
79
|
-
],
|
|
80
|
-
"codeSnippets": [
|
|
81
|
-
{ "language": "typescript", "filename": "src/index.ts", "code": "const x = 1;" }
|
|
82
|
-
],
|
|
83
|
-
"keyPoints": ["Important point 1", "Important point 2"],
|
|
84
|
-
"decisions": [
|
|
85
|
-
{ "decision": "Use PostgreSQL", "rationale": "Better JSON support" }
|
|
86
|
-
],
|
|
87
|
-
"links": ["https://docs.example.com"],
|
|
88
|
-
"nextSteps": ["Review with team", "Create follow-up tasks"],
|
|
89
|
-
"notes": "Additional notes"
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
Examples:
|
|
93
|
-
skills run implementation-memento -- "API endpoint found" --slug api-discovery
|
|
94
|
-
skills run implementation-memento -- "DB choice" --slug db-decision --category decision
|
|
95
|
-
skills run implementation-memento -- "Discovery" --slug discovery --data '{"keyPoints":["Found useful pattern"],"links":["https://example.com"]}'
|
|
96
|
-
`);
|
|
97
|
-
process.exit(0);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Get title
|
|
101
|
-
const title = args._[0] as string;
|
|
102
|
-
|
|
103
|
-
if (!title) {
|
|
104
|
-
console.error("Error: Title is required");
|
|
105
|
-
console.error('Usage: skills run implementation-memento -- "<title>" --slug <slug>');
|
|
106
|
-
process.exit(1);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Get slug
|
|
110
|
-
const rawSlug = args.slug as string;
|
|
111
|
-
|
|
112
|
-
if (!rawSlug) {
|
|
113
|
-
console.error("Error: --slug is required");
|
|
114
|
-
console.error('Usage: skills run implementation-memento -- "<title>" --slug <slug>');
|
|
115
|
-
process.exit(1);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Normalize slug (replace spaces and dashes with underscores)
|
|
119
|
-
const slug = rawSlug.toLowerCase().replace(/[\s-]+/g, "_").replace(/[^a-z0-9_]/g, "");
|
|
120
|
-
|
|
121
|
-
// Sanitize content for safe inclusion (handle quotes and special chars)
|
|
122
|
-
function sanitizeContent(text: string): string {
|
|
123
|
-
if (!text) return "";
|
|
124
|
-
// Normalize line endings and trim
|
|
125
|
-
return text
|
|
126
|
-
.replace(/\\n/g, "\n") // Handle escaped newlines from CLI
|
|
127
|
-
.replace(/\\t/g, "\t") // Handle escaped tabs from CLI
|
|
128
|
-
.trim();
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// Get content if provided
|
|
132
|
-
const userContent = args.content ? sanitizeContent(args.content as string) : "";
|
|
133
|
-
|
|
134
|
-
// Find .implementation directory
|
|
135
|
-
function findImplementationDir(): string | null {
|
|
136
|
-
// Use SKILLS_CWD if available (user's working directory from remote execution)
|
|
137
|
-
let currentDir = process.env.SKILLS_CWD || process.cwd();
|
|
138
|
-
|
|
139
|
-
while (currentDir !== path.dirname(currentDir)) {
|
|
140
|
-
const implDir = path.join(currentDir, ".implementation");
|
|
141
|
-
if (fs.existsSync(implDir)) {
|
|
142
|
-
return implDir;
|
|
143
|
-
}
|
|
144
|
-
currentDir = path.dirname(currentDir);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
return null;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
const implDir = findImplementationDir();
|
|
151
|
-
|
|
152
|
-
if (!implDir) {
|
|
153
|
-
console.error("Error: .implementation directory not found");
|
|
154
|
-
console.error("Run 'skills run implementation-init' first to create the folder structure");
|
|
155
|
-
process.exit(1);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// Output directory
|
|
159
|
-
const outputDir = path.join(implDir, "data", "mementos");
|
|
160
|
-
|
|
161
|
-
if (!fs.existsSync(outputDir)) {
|
|
162
|
-
fs.mkdirSync(outputDir, { recursive: true });
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// Get next sequence number
|
|
166
|
-
function getNextSequence(): number {
|
|
167
|
-
if (!fs.existsSync(outputDir)) return 1;
|
|
168
|
-
|
|
169
|
-
const files = fs.readdirSync(outputDir);
|
|
170
|
-
let maxSeq = 0;
|
|
171
|
-
|
|
172
|
-
for (const file of files) {
|
|
173
|
-
const match = file.match(/^memento_(\d{5})_/);
|
|
174
|
-
if (match) {
|
|
175
|
-
const seq = parseInt(match[1], 10);
|
|
176
|
-
if (seq > maxSeq) maxSeq = seq;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
return maxSeq + 1;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
const sequence = getNextSequence();
|
|
184
|
-
const mementoId = `memento_${String(sequence).padStart(5, "0")}`;
|
|
185
|
-
const timestamp = new Date().toISOString().split("T")[0];
|
|
186
|
-
|
|
187
|
-
// Parse JSON data if provided
|
|
188
|
-
let jsonData: MementoJsonData | undefined;
|
|
189
|
-
if (args.data) {
|
|
190
|
-
try {
|
|
191
|
-
jsonData = JSON.parse(args.data as string);
|
|
192
|
-
} catch (e) {
|
|
193
|
-
console.error("Error: Invalid JSON data provided");
|
|
194
|
-
console.error("Make sure to escape quotes properly in the shell");
|
|
195
|
-
process.exit(1);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// Parse tags
|
|
200
|
-
const tags = args.tags ? (args.tags as string).split(",").map((t: string) => t.trim()) : [];
|
|
201
|
-
|
|
202
|
-
// Parse related
|
|
203
|
-
const related = args.related ? (args.related as string).split(",").map((r: string) => r.trim()) : [];
|
|
204
|
-
|
|
205
|
-
// Validate category
|
|
206
|
-
const validCategories = ["code", "decision", "context", "note", "research"];
|
|
207
|
-
const category = validCategories.includes(args.category) ? args.category : "note";
|
|
208
|
-
|
|
209
|
-
// Build memento data
|
|
210
|
-
const mementoData: MementoData = {
|
|
211
|
-
id: mementoId,
|
|
212
|
-
slug,
|
|
213
|
-
title,
|
|
214
|
-
content: userContent || title,
|
|
215
|
-
category: category as MementoData["category"],
|
|
216
|
-
tags,
|
|
217
|
-
related,
|
|
218
|
-
created: timestamp,
|
|
219
|
-
updated: timestamp,
|
|
220
|
-
jsonData,
|
|
221
|
-
};
|
|
222
|
-
|
|
223
|
-
// Get category description
|
|
224
|
-
function getCategoryDescription(cat: string): string {
|
|
225
|
-
const descriptions: Record<string, string> = {
|
|
226
|
-
code: "Code snippets, functions, patterns discovered during development",
|
|
227
|
-
decision: "Architecture decisions, library choices, implementation approaches",
|
|
228
|
-
context: "Current state, progress updates, situational information",
|
|
229
|
-
note: "General notes, observations, reminders",
|
|
230
|
-
research: "Research findings, comparisons, evaluations",
|
|
231
|
-
};
|
|
232
|
-
return descriptions[cat] || descriptions.note;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// Generate markdown content
|
|
236
|
-
function generateMarkdown(data: MementoData): string {
|
|
237
|
-
const json = data.jsonData;
|
|
238
|
-
let content = `# Memento: ${data.title}\n\n`;
|
|
239
|
-
|
|
240
|
-
// Metadata
|
|
241
|
-
content += `- **ID**: ${data.id}\n`;
|
|
242
|
-
content += `- **Slug**: ${data.slug}\n`;
|
|
243
|
-
content += `- **Category**: ${data.category}\n`;
|
|
244
|
-
|
|
245
|
-
if (data.tags.length > 0) {
|
|
246
|
-
content += `- **Tags**: ${data.tags.join(", ")}\n`;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
if (data.related.length > 0) {
|
|
250
|
-
content += `- **Related**: ${data.related.join(", ")}\n`;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
content += `- **Created**: ${data.created}\n`;
|
|
254
|
-
content += `- **Updated**: ${data.updated}\n`;
|
|
255
|
-
|
|
256
|
-
// Context section
|
|
257
|
-
content += `\n## Context\n\n`;
|
|
258
|
-
if (json?.context) {
|
|
259
|
-
content += `${json.context}\n`;
|
|
260
|
-
} else if (userContent) {
|
|
261
|
-
content += `${userContent}\n`;
|
|
262
|
-
} else {
|
|
263
|
-
content += `<!-- ${getCategoryDescription(data.category)} -->\n`;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// Custom sections (if provided)
|
|
267
|
-
if (json?.sections && json.sections.length > 0) {
|
|
268
|
-
for (const section of json.sections) {
|
|
269
|
-
content += `\n## ${section.heading}\n\n`;
|
|
270
|
-
content += `${section.content}\n`;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
// Key Points (if provided)
|
|
275
|
-
if (json?.keyPoints && json.keyPoints.length > 0) {
|
|
276
|
-
content += `\n## Key Points\n\n`;
|
|
277
|
-
for (const point of json.keyPoints) {
|
|
278
|
-
content += `- ${point}\n`;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
// Decisions (if provided - especially for decision category)
|
|
283
|
-
if (json?.decisions && json.decisions.length > 0) {
|
|
284
|
-
content += `\n## Decisions\n\n`;
|
|
285
|
-
for (const dec of json.decisions) {
|
|
286
|
-
content += `### ${dec.decision}\n\n`;
|
|
287
|
-
if (dec.rationale) {
|
|
288
|
-
content += `**Rationale:** ${dec.rationale}\n\n`;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
// Code Snippets (if provided - especially for code category)
|
|
294
|
-
if (json?.codeSnippets && json.codeSnippets.length > 0) {
|
|
295
|
-
content += `\n## Code Snippets\n`;
|
|
296
|
-
for (const snippet of json.codeSnippets) {
|
|
297
|
-
if (snippet.filename) {
|
|
298
|
-
content += `\n### ${snippet.filename}\n\n`;
|
|
299
|
-
} else {
|
|
300
|
-
content += `\n`;
|
|
301
|
-
}
|
|
302
|
-
const lang = snippet.language || "";
|
|
303
|
-
content += `\`\`\`${lang}\n${snippet.code}\n\`\`\`\n`;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
// Links (if provided)
|
|
308
|
-
if (json?.links && json.links.length > 0) {
|
|
309
|
-
content += `\n## Links\n\n`;
|
|
310
|
-
for (const link of json.links) {
|
|
311
|
-
content += `- ${link}\n`;
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
// Next Steps (if provided)
|
|
316
|
-
if (json?.nextSteps && json.nextSteps.length > 0) {
|
|
317
|
-
content += `\n## Next Steps\n\n`;
|
|
318
|
-
for (const step of json.nextSteps) {
|
|
319
|
-
content += `- [ ] ${step}\n`;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
// Related Items
|
|
324
|
-
content += `\n## Related Items\n\n`;
|
|
325
|
-
if (data.related.length > 0) {
|
|
326
|
-
for (const rel of data.related) {
|
|
327
|
-
content += `- ${rel}\n`;
|
|
328
|
-
}
|
|
329
|
-
} else {
|
|
330
|
-
content += `<!-- Add related mementos, todos, or plans -->\n`;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// Notes section
|
|
334
|
-
content += `\n## Notes\n\n`;
|
|
335
|
-
if (json?.notes) {
|
|
336
|
-
content += `${json.notes}\n`;
|
|
337
|
-
} else {
|
|
338
|
-
content += `<!-- Additional notes and observations -->\n`;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
// History
|
|
342
|
-
content += `\n## History\n\n`;
|
|
343
|
-
content += `| Date | Action |\n`;
|
|
344
|
-
content += `|------|--------|\n`;
|
|
345
|
-
content += `| ${data.created} | Created |\n`;
|
|
346
|
-
|
|
347
|
-
return content;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// Update index file
|
|
351
|
-
function updateIndex(data: MementoData, filename: string): void {
|
|
352
|
-
const indexPath = path.join(implDir, "data", "indexes", "MEMENTOS.md");
|
|
353
|
-
|
|
354
|
-
// Create index file if it doesn't exist
|
|
355
|
-
if (!fs.existsSync(indexPath)) {
|
|
356
|
-
const initialContent = `# Mementos Index
|
|
357
|
-
|
|
358
|
-
Project: ${path.basename(path.dirname(implDir))}
|
|
359
|
-
Created: ${timestamp}
|
|
360
|
-
|
|
361
|
-
## Overview
|
|
362
|
-
|
|
363
|
-
This file indexes all mementos in this implementation.
|
|
364
|
-
|
|
365
|
-
## Recent Mementos
|
|
366
|
-
|
|
367
|
-
| ID | Slug | Title | Category | Created |
|
|
368
|
-
|----|------|-------|----------|---------|
|
|
369
|
-
| ${data.id} | ${data.slug} | ${data.title} | ${data.category} | ${data.created} |
|
|
370
|
-
|
|
371
|
-
---
|
|
372
|
-
|
|
373
|
-
*Updated: ${timestamp}*
|
|
374
|
-
`;
|
|
375
|
-
fs.writeFileSync(indexPath, initialContent);
|
|
376
|
-
return;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
let content = fs.readFileSync(indexPath, "utf-8");
|
|
380
|
-
|
|
381
|
-
// Add new row to table
|
|
382
|
-
const newRow = `| ${data.id} | ${data.slug} | ${data.title} | ${data.category} | ${data.created} |`;
|
|
383
|
-
|
|
384
|
-
// Find the table and add new row after header
|
|
385
|
-
const tableMatch = content.match(/(## Recent Mementos[\s\S]*?\|[-|]+\|[-|]+\|[-|]+\|[-|]+\|[-|]+\|)/);
|
|
386
|
-
if (tableMatch) {
|
|
387
|
-
const insertPoint = tableMatch.index! + tableMatch[0].length;
|
|
388
|
-
content = content.slice(0, insertPoint) + "\n" + newRow + content.slice(insertPoint);
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
// Update timestamp
|
|
392
|
-
content = content.replace(/\*Updated:.*\*/, `*Updated: ${timestamp}*`);
|
|
393
|
-
|
|
394
|
-
fs.writeFileSync(indexPath, content);
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
// Main execution
|
|
398
|
-
async function main(): Promise<void> {
|
|
399
|
-
console.log(`\nImplementation Memento`);
|
|
400
|
-
console.log(`======================\n`);
|
|
401
|
-
|
|
402
|
-
// Generate filename
|
|
403
|
-
const filename = `${mementoId}_${slug}.md`;
|
|
404
|
-
const outputPath = path.join(outputDir, filename);
|
|
405
|
-
|
|
406
|
-
// Generate content
|
|
407
|
-
const content = generateMarkdown(mementoData);
|
|
408
|
-
|
|
409
|
-
// Write file
|
|
410
|
-
fs.writeFileSync(outputPath, content);
|
|
411
|
-
|
|
412
|
-
console.log(`Created: ${outputPath}`);
|
|
413
|
-
console.log(`\nMemento Details:`);
|
|
414
|
-
console.log(` ID: ${mementoData.id}`);
|
|
415
|
-
console.log(` Title: ${mementoData.title}`);
|
|
416
|
-
console.log(` Slug: ${mementoData.slug}`);
|
|
417
|
-
console.log(` Category: ${mementoData.category}`);
|
|
418
|
-
|
|
419
|
-
if (mementoData.tags.length > 0) {
|
|
420
|
-
console.log(` Tags: ${mementoData.tags.join(", ")}`);
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
if (mementoData.related.length > 0) {
|
|
424
|
-
console.log(` Related: ${mementoData.related.join(", ")}`);
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
// Update index
|
|
428
|
-
if (!args["no-index"]) {
|
|
429
|
-
console.log(`\nUpdating MEMENTOS.md index...`);
|
|
430
|
-
updateIndex(mementoData, filename);
|
|
431
|
-
console.log(`Index updated.`);
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
console.log(`\n${"=".repeat(40)}`);
|
|
435
|
-
console.log(`\nMemento created successfully!`);
|
|
436
|
-
console.log(`File: .implementation/data/mementos/${filename}`);
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
main().catch((error) => {
|
|
440
|
-
console.error(`Error: ${error.message}`);
|
|
441
|
-
process.exit(1);
|
|
442
|
-
});
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "ES2022",
|
|
5
|
-
"moduleResolution": "bundler",
|
|
6
|
-
"esModuleInterop": true,
|
|
7
|
-
"strict": true,
|
|
8
|
-
"skipLibCheck": true,
|
|
9
|
-
"outDir": "dist",
|
|
10
|
-
"declaration": true,
|
|
11
|
-
"types": ["bun-types"]
|
|
12
|
-
},
|
|
13
|
-
"include": ["src/**/*", "bin/**/*"]
|
|
14
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 Hasna
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# skill-linear
|
|
2
|
-
|
|
3
|
-
Work with Linear issues, projects, and workflows
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
This Skill provides capabilities for managing Linear project management tasks including creating issues, updating status, searching across projects, and managing teams and cycles.
|
|
8
|
-
|
|
9
|
-
## MCP Server
|
|
10
|
-
|
|
11
|
-
Uses the Linear MCP server for API access.
|
|
12
|
-
|
|
13
|
-
Connection options:
|
|
14
|
-
- Remote SSE: `https://mcp.linear.app/sse`
|
|
15
|
-
- NPM package: `linear-mcp-server`
|
|
16
|
-
|
|
17
|
-
## Usage
|
|
18
|
-
|
|
19
|
-
This Skill is automatically invoked by Claude Code when working with Linear-related tasks.
|
|
20
|
-
|
|
21
|
-
Example requests:
|
|
22
|
-
- "Create a Linear issue for the authentication bug"
|
|
23
|
-
- "Find all high-priority issues in the backend project"
|
|
24
|
-
- "Update LIN-123 to In Progress"
|
|
25
|
-
|
|
26
|
-
## Setup
|
|
27
|
-
|
|
28
|
-
Get your Linear API key from: Linear Settings → API → Personal API Keys
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: skill-linear
|
|
3
|
-
description: Work with Linear issues, projects, and workflows. Create, update, search issues, manage projects, cycles, and teams. Use when working with Linear project management tasks.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Linear Project Management Skill
|
|
7
|
-
|
|
8
|
-
## What this Skill does
|
|
9
|
-
|
|
10
|
-
This Skill helps you interact with Linear for project management tasks using the Linear MCP server tools.
|
|
11
|
-
|
|
12
|
-
## When to use this Skill
|
|
13
|
-
|
|
14
|
-
Use this Skill when you need to:
|
|
15
|
-
- Create or update Linear issues
|
|
16
|
-
- Search for issues across projects
|
|
17
|
-
- Manage projects, milestones, and cycles
|
|
18
|
-
- Work with teams and assignments
|
|
19
|
-
- Track issue status and progress
|
|
20
|
-
- Comment on issues or discussions
|
|
21
|
-
|
|
22
|
-
## MCP Server Connection
|
|
23
|
-
|
|
24
|
-
The Linear MCP server provides access to Linear's API. To connect:
|
|
25
|
-
|
|
26
|
-
### Option 1: Remote SSE Connection (Recommended)
|
|
27
|
-
```json
|
|
28
|
-
{
|
|
29
|
-
"linear": {
|
|
30
|
-
"url": "https://mcp.linear.app/sse"
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### Option 2: NPM Package
|
|
36
|
-
```json
|
|
37
|
-
{
|
|
38
|
-
"linear": {
|
|
39
|
-
"command": "npx",
|
|
40
|
-
"args": ["-y", "linear-mcp-server"],
|
|
41
|
-
"env": {
|
|
42
|
-
"LINEAR_API_KEY": "${LINEAR_API_KEY}"
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
**Setup**: Get your API key from Linear Settings → API → Personal API Keys
|
|
49
|
-
|
|
50
|
-
## Available Operations
|
|
51
|
-
|
|
52
|
-
The Linear MCP server provides tools for:
|
|
53
|
-
|
|
54
|
-
- **Issue Management**: Create, update, search, and manage issues
|
|
55
|
-
- **Projects**: List and manage projects and roadmaps
|
|
56
|
-
- **Teams**: Work with team structures and assignments
|
|
57
|
-
- **Cycles**: Manage sprint cycles and iterations
|
|
58
|
-
- **Comments**: Add comments and discussions to issues
|
|
59
|
-
- **Labels**: Organize issues with labels and tags
|
|
60
|
-
- **Status**: Track and update issue states
|
|
61
|
-
|
|
62
|
-
## Examples
|
|
63
|
-
|
|
64
|
-
### Example 1: Create an issue
|
|
65
|
-
"Create a Linear issue for implementing the new authentication system"
|
|
66
|
-
→ Claude uses Linear MCP tools to create an issue with details
|
|
67
|
-
|
|
68
|
-
### Example 2: Search issues
|
|
69
|
-
"Find all high-priority bugs in the backend project"
|
|
70
|
-
→ Claude searches Linear and provides filtered results
|
|
71
|
-
|
|
72
|
-
### Example 3: Update issue status
|
|
73
|
-
"Move issue LIN-123 to In Progress"
|
|
74
|
-
→ Claude updates the issue status using Linear tools
|
|
75
|
-
|
|
76
|
-
### Example 4: List project issues
|
|
77
|
-
"Show me all issues in the Q1 Roadmap project"
|
|
78
|
-
→ Claude fetches and displays project issues
|
|
79
|
-
|
|
80
|
-
## Best practices
|
|
81
|
-
|
|
82
|
-
- Reference specific issue IDs when updating (e.g., "LIN-123")
|
|
83
|
-
- Include priority, labels, and assignees when creating issues
|
|
84
|
-
- Use clear descriptions for better issue tracking
|
|
85
|
-
- Leverage Linear's project hierarchy for organization
|
|
86
|
-
- Set appropriate due dates and cycles
|
|
87
|
-
|
|
88
|
-
## Integration Notes
|
|
89
|
-
|
|
90
|
-
The Linear MCP server automatically handles:
|
|
91
|
-
- Authentication via API key
|
|
92
|
-
- Rate limiting and retries
|
|
93
|
-
- Issue state transitions
|
|
94
|
-
- Team and project resolution
|