@openhands/extensions 0.1.0 → 0.2.0

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 (347) hide show
  1. package/.agents/skills/custom-codereview-guide.md +25 -0
  2. package/.github/pull_request_template.md +38 -0
  3. package/.github/release.yml +14 -0
  4. package/.github/workflows/check-extensions.yml +72 -0
  5. package/.github/workflows/npm-publish.yml +89 -0
  6. package/.github/workflows/pr.yml +30 -0
  7. package/.github/workflows/release.yml +24 -0
  8. package/.github/workflows/tests.yml +25 -0
  9. package/.github/workflows/vulnerability-scan.yml +87 -0
  10. package/.release-please-manifest.json +3 -0
  11. package/AGENTS.md +132 -0
  12. package/README.md +10 -0
  13. package/analysis_results.md +162 -0
  14. package/marketplaces/large-codebase.json +66 -0
  15. package/marketplaces/openhands-extensions.json +682 -0
  16. package/package.json +4 -10
  17. package/plugins/README.md +30 -0
  18. package/plugins/city-weather/.plugin/plugin.json +13 -0
  19. package/plugins/city-weather/README.md +145 -0
  20. package/plugins/city-weather/commands/now.md +56 -0
  21. package/plugins/cobol-modernization/.plugin/plugin.json +19 -0
  22. package/plugins/cobol-modernization/README.md +201 -0
  23. package/plugins/cobol-modernization/references/troubleshooting.md +18 -0
  24. package/plugins/cobol-modernization/skills/build-setup/SKILL.md +78 -0
  25. package/plugins/cobol-modernization/skills/build-setup/scripts/install-gnucobol.sh +32 -0
  26. package/plugins/cobol-modernization/skills/cobol-modernization-overview/SKILL.md +113 -0
  27. package/plugins/cobol-modernization/skills/mainfraime-removal/SKILL.md +62 -0
  28. package/plugins/cobol-modernization/skills/mainfraime-removal/references/cics-transformation-examples.md +45 -0
  29. package/plugins/cobol-modernization/skills/mainframe-planning/SKILL.md +78 -0
  30. package/plugins/cobol-modernization/skills/to-java-migration/SKILL.md +59 -0
  31. package/plugins/cobol-modernization/skills/to-java-migration/references/cobol-to-java-example.md +58 -0
  32. package/plugins/cobol-modernization/skills/to-java-migration/references/datatype-mappings.md +19 -0
  33. package/plugins/issue-duplicate-checker/.plugin/plugin.json +13 -0
  34. package/plugins/issue-duplicate-checker/README.md +51 -0
  35. package/plugins/issue-duplicate-checker/action.yml +349 -0
  36. package/plugins/issue-duplicate-checker/scripts/auto_close_duplicate_issues.py +569 -0
  37. package/plugins/issue-duplicate-checker/scripts/issue_duplicate_check_openhands.py +681 -0
  38. package/plugins/issue-duplicate-checker/scripts/post_duplicate_notice.js +220 -0
  39. package/plugins/issue-duplicate-checker/scripts/remove_duplicate_candidate_label.js +27 -0
  40. package/plugins/magic-test/.plugin/plugin.json +13 -0
  41. package/plugins/magic-test/skills/magic-word/SKILL.md +33 -0
  42. package/plugins/migration-scoring/.plugin/plugin.json +19 -0
  43. package/plugins/migration-scoring/README.md +244 -0
  44. package/plugins/migration-scoring/skills/migration-mapping/SKILL.md +72 -0
  45. package/plugins/migration-scoring/skills/migration-report/SKILL.md +118 -0
  46. package/plugins/migration-scoring/skills/migration-scoring-overview/SKILL.md +126 -0
  47. package/plugins/migration-scoring/skills/score-quality/SKILL.md +54 -0
  48. package/plugins/migration-scoring/skills/score-quality/references/scoring-criteria.md +30 -0
  49. package/plugins/migration-scoring/skills/score-style/SKILL.md +106 -0
  50. package/plugins/onboarding/.plugin/plugin.json +20 -0
  51. package/plugins/onboarding/README.md +30 -0
  52. package/plugins/onboarding/references/criteria.md +144 -0
  53. package/plugins/onboarding/skills/agent-readiness-report/README.md +23 -0
  54. package/plugins/onboarding/skills/agent-readiness-report/SKILL.md +122 -0
  55. package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_agent_instructions.sh +88 -0
  56. package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_build_env.sh +114 -0
  57. package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_feedback_loops.sh +133 -0
  58. package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_policy.sh +113 -0
  59. package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_workflows.sh +127 -0
  60. package/plugins/onboarding/skills/improve-agent-readiness/README.md +19 -0
  61. package/plugins/onboarding/skills/improve-agent-readiness/SKILL.md +167 -0
  62. package/plugins/onboarding/skills/setup-agents-md/README.md +15 -0
  63. package/plugins/onboarding/skills/setup-agents-md/SKILL.md +150 -0
  64. package/plugins/onboarding/skills/setup-openhands/README.md +20 -0
  65. package/plugins/onboarding/skills/setup-openhands/SKILL.md +56 -0
  66. package/plugins/onboarding/skills/setup-pr-review/README.md +23 -0
  67. package/plugins/onboarding/skills/setup-pr-review/SKILL.md +72 -0
  68. package/plugins/openhands/.plugin/plugin.json +13 -0
  69. package/plugins/openhands/README.md +52 -0
  70. package/plugins/openhands/SKILL.md +61 -0
  71. package/plugins/openhands/commands/create.md +55 -0
  72. package/plugins/openhands/commands/openhands-cloud.md +8 -0
  73. package/plugins/openhands/scripts/run.sh +69 -0
  74. package/plugins/pr-review/.plugin/plugin.json +13 -0
  75. package/plugins/pr-review/README.md +393 -0
  76. package/plugins/pr-review/action.yml +298 -0
  77. package/plugins/pr-review/scripts/agent_script.py +1282 -0
  78. package/plugins/pr-review/scripts/evaluate_review.py +655 -0
  79. package/plugins/pr-review/scripts/prompt.py +260 -0
  80. package/plugins/pr-review/workflows/pr-review-by-openhands.yml +51 -0
  81. package/plugins/pr-review/workflows/pr-review-evaluation.yml +85 -0
  82. package/plugins/qa-changes/.plugin/plugin.json +11 -0
  83. package/plugins/qa-changes/README.md +185 -0
  84. package/plugins/qa-changes/action.yml +181 -0
  85. package/plugins/qa-changes/scripts/agent_script.py +406 -0
  86. package/plugins/qa-changes/scripts/evaluate_qa_changes.py +385 -0
  87. package/plugins/qa-changes/scripts/prompt.py +174 -0
  88. package/plugins/qa-changes/workflows/qa-changes-by-openhands.yml +50 -0
  89. package/plugins/qa-changes/workflows/qa-changes-evaluation.yml +85 -0
  90. package/plugins/release-notes/.plugin/plugin.json +19 -0
  91. package/plugins/release-notes/README.md +283 -0
  92. package/plugins/release-notes/SKILL.md +83 -0
  93. package/plugins/release-notes/action.yml +117 -0
  94. package/plugins/release-notes/commands/release-notes.md +8 -0
  95. package/plugins/release-notes/scripts/agent_script.py +292 -0
  96. package/plugins/release-notes/scripts/generate_release_notes.py +733 -0
  97. package/plugins/release-notes/scripts/prompt.py +90 -0
  98. package/plugins/release-notes/scripts/validate_release_notes.py +328 -0
  99. package/plugins/release-notes/workflows/release-notes.yml +76 -0
  100. package/plugins/vulnerability-remediation/.plugin/plugin.json +19 -0
  101. package/plugins/vulnerability-remediation/README.md +217 -0
  102. package/plugins/vulnerability-remediation/action.yml +187 -0
  103. package/plugins/vulnerability-remediation/scripts/scan_and_remediate.py +561 -0
  104. package/plugins/vulnerability-remediation/workflows/vulnerability-scan.yml +87 -0
  105. package/pyproject.toml +12 -0
  106. package/release-please-config.json +16 -0
  107. package/scripts/sync_extensions.py +494 -0
  108. package/scripts/sync_openhands_sdk_skill.py +264 -0
  109. package/skills/README.md +159 -0
  110. package/skills/add-javadoc/.plugin/plugin.json +18 -0
  111. package/skills/add-javadoc/README.md +40 -0
  112. package/skills/add-javadoc/SKILL.md +35 -0
  113. package/skills/add-javadoc/references/example.md +32 -0
  114. package/skills/add-skill/.plugin/plugin.json +18 -0
  115. package/skills/add-skill/README.md +67 -0
  116. package/skills/add-skill/SKILL.md +47 -0
  117. package/skills/add-skill/scripts/fetch_skill.py +259 -0
  118. package/skills/agent-creator/.plugin/plugin.json +20 -0
  119. package/skills/agent-creator/README.md +104 -0
  120. package/skills/agent-creator/SKILL.md +190 -0
  121. package/skills/agent-creator/commands/agent-creator.md +8 -0
  122. package/skills/agent-creator/references/fallback.md +117 -0
  123. package/skills/agent-memory/.plugin/plugin.json +18 -0
  124. package/skills/agent-memory/README.md +35 -0
  125. package/skills/agent-memory/SKILL.md +30 -0
  126. package/skills/agent-memory/commands/remember.md +8 -0
  127. package/skills/agent-sdk-builder/.plugin/plugin.json +18 -0
  128. package/skills/agent-sdk-builder/README.md +40 -0
  129. package/skills/agent-sdk-builder/SKILL.md +37 -0
  130. package/skills/agent-sdk-builder/commands/agent-builder.md +8 -0
  131. package/skills/azure-devops/.plugin/plugin.json +18 -0
  132. package/skills/azure-devops/README.md +55 -0
  133. package/skills/azure-devops/SKILL.md +50 -0
  134. package/skills/bitbucket/.plugin/plugin.json +17 -0
  135. package/skills/bitbucket/README.md +50 -0
  136. package/skills/bitbucket/SKILL.md +45 -0
  137. package/skills/code-review/.plugin/plugin.json +19 -0
  138. package/skills/code-review/README.md +18 -0
  139. package/skills/code-review/SKILL.md +208 -0
  140. package/skills/code-review/commands/codereview-roasted.md +8 -0
  141. package/skills/code-review/commands/codereview.md +8 -0
  142. package/skills/code-review/references/risk-evaluation.md +41 -0
  143. package/skills/code-review/references/supply-chain-security.md +31 -0
  144. package/skills/code-simplifier/.plugin/plugin.json +21 -0
  145. package/skills/code-simplifier/README.md +30 -0
  146. package/skills/code-simplifier/SKILL.md +91 -0
  147. package/skills/code-simplifier/commands/simplify.md +8 -0
  148. package/skills/code-simplifier/references/code-quality-review.md +86 -0
  149. package/skills/code-simplifier/references/code-reuse-review.md +63 -0
  150. package/skills/code-simplifier/references/efficiency-review.md +81 -0
  151. package/skills/datadog/.plugin/plugin.json +19 -0
  152. package/skills/datadog/README.md +100 -0
  153. package/skills/datadog/SKILL.md +95 -0
  154. package/skills/deno/.plugin/plugin.json +18 -0
  155. package/skills/deno/README.md +5 -0
  156. package/skills/deno/SKILL.md +99 -0
  157. package/skills/deno/references/README.md +6 -0
  158. package/skills/discord/.plugin/plugin.json +18 -0
  159. package/skills/discord/README.md +31 -0
  160. package/skills/discord/SKILL.md +109 -0
  161. package/skills/discord/__init__.py +0 -0
  162. package/skills/discord/references/REFERENCE.md +78 -0
  163. package/skills/discord/scripts/__init__.py +0 -0
  164. package/skills/discord/scripts/_http.py +127 -0
  165. package/skills/discord/scripts/post_webhook.py +106 -0
  166. package/skills/discord/scripts/send_message.py +102 -0
  167. package/skills/docker/.plugin/plugin.json +17 -0
  168. package/skills/docker/README.md +34 -0
  169. package/skills/docker/SKILL.md +29 -0
  170. package/skills/evidence-based-citations/.plugin/plugin.json +20 -0
  171. package/skills/evidence-based-citations/README.md +31 -0
  172. package/skills/evidence-based-citations/SKILL.md +59 -0
  173. package/skills/flarglebargle/.plugin/plugin.json +16 -0
  174. package/skills/flarglebargle/README.md +14 -0
  175. package/skills/flarglebargle/SKILL.md +9 -0
  176. package/skills/frontend-design/.plugin/plugin.json +21 -0
  177. package/skills/frontend-design/LICENSE.txt +177 -0
  178. package/skills/frontend-design/README.md +42 -0
  179. package/skills/frontend-design/SKILL.md +42 -0
  180. package/skills/github/.plugin/plugin.json +19 -0
  181. package/skills/github/README.md +42 -0
  182. package/skills/github/SKILL.md +106 -0
  183. package/skills/github-pr-review/.plugin/plugin.json +18 -0
  184. package/skills/github-pr-review/README.md +145 -0
  185. package/skills/github-pr-review/SKILL.md +148 -0
  186. package/skills/github-pr-review/commands/github-pr-review.md +8 -0
  187. package/skills/github-pr-reviewer/.plugin/plugin.json +20 -0
  188. package/skills/github-pr-reviewer/README.md +34 -0
  189. package/skills/github-pr-reviewer/SKILL.md +89 -0
  190. package/skills/github-pr-reviewer/commands/pr-reviewer:setup.md +8 -0
  191. package/skills/github-repo-monitor/.plugin/plugin.json +22 -0
  192. package/skills/github-repo-monitor/README.md +70 -0
  193. package/skills/github-repo-monitor/SKILL.md +316 -0
  194. package/skills/github-repo-monitor/commands/github-monitor:poll.md +8 -0
  195. package/skills/github-repo-monitor/references/github-api.md +241 -0
  196. package/skills/github-repo-monitor/references/state-schema.md +160 -0
  197. package/skills/github-repo-monitor/scripts/main.py +915 -0
  198. package/skills/github-repo-monitor/tests/test_main.py +400 -0
  199. package/skills/gitlab/.plugin/plugin.json +17 -0
  200. package/skills/gitlab/README.md +37 -0
  201. package/skills/gitlab/SKILL.md +32 -0
  202. package/skills/incident-retrospective/.plugin/plugin.json +21 -0
  203. package/skills/incident-retrospective/README.md +34 -0
  204. package/skills/incident-retrospective/SKILL.md +98 -0
  205. package/skills/incident-retrospective/commands/incident-retro:setup.md +8 -0
  206. package/skills/iterate/.plugin/plugin.json +13 -0
  207. package/skills/iterate/README.md +25 -0
  208. package/skills/iterate/SKILL.md +399 -0
  209. package/skills/iterate/commands/babysit.md +8 -0
  210. package/skills/iterate/commands/iterate.md +8 -0
  211. package/skills/iterate/commands/verify.md +8 -0
  212. package/skills/iterate/references/heuristics.md +58 -0
  213. package/skills/iterate/references/verification.md +96 -0
  214. package/skills/jupyter/.plugin/plugin.json +18 -0
  215. package/skills/jupyter/README.md +55 -0
  216. package/skills/jupyter/SKILL.md +50 -0
  217. package/skills/kubernetes/.plugin/plugin.json +18 -0
  218. package/skills/kubernetes/README.md +53 -0
  219. package/skills/kubernetes/SKILL.md +48 -0
  220. package/skills/learn-from-code-review/.plugin/plugin.json +19 -0
  221. package/skills/learn-from-code-review/README.md +64 -0
  222. package/skills/learn-from-code-review/SKILL.md +186 -0
  223. package/skills/learn-from-code-review/commands/learn-from-reviews.md +8 -0
  224. package/skills/linear/.plugin/plugin.json +19 -0
  225. package/skills/linear/README.md +58 -0
  226. package/skills/linear/SKILL.md +213 -0
  227. package/skills/linear-triage/.plugin/plugin.json +21 -0
  228. package/skills/linear-triage/README.md +34 -0
  229. package/skills/linear-triage/SKILL.md +91 -0
  230. package/skills/linear-triage/commands/linear-triage:setup.md +8 -0
  231. package/skills/notion/.plugin/plugin.json +17 -0
  232. package/skills/notion/README.md +114 -0
  233. package/skills/notion/SKILL.md +109 -0
  234. package/skills/npm/.plugin/plugin.json +17 -0
  235. package/skills/npm/README.md +14 -0
  236. package/skills/npm/SKILL.md +9 -0
  237. package/skills/openhands-api/.plugin/plugin.json +22 -0
  238. package/skills/openhands-api/README.md +48 -0
  239. package/skills/openhands-api/SKILL.md +399 -0
  240. package/skills/openhands-api/references/README.md +33 -0
  241. package/skills/openhands-api/references/TROUBLESHOOTING.md +81 -0
  242. package/skills/openhands-api/references/example_prompt.md +12 -0
  243. package/skills/openhands-api/scripts/openhands_api.py +606 -0
  244. package/skills/openhands-api/scripts/openhands_api.ts +252 -0
  245. package/skills/openhands-automation/.plugin/plugin.json +19 -0
  246. package/skills/openhands-automation/README.md +89 -0
  247. package/skills/openhands-automation/SKILL.md +875 -0
  248. package/skills/openhands-automation/commands/automation:create.md +8 -0
  249. package/skills/openhands-automation/references/ab-testing.md +185 -0
  250. package/skills/openhands-automation/references/custom-automation.md +644 -0
  251. package/skills/openhands-sdk/.plugin/plugin.json +20 -0
  252. package/skills/openhands-sdk/README.md +22 -0
  253. package/skills/openhands-sdk/SKILL.md +229 -0
  254. package/skills/openhands-sdk/commands/sdk.md +8 -0
  255. package/skills/pdflatex/.plugin/plugin.json +18 -0
  256. package/skills/pdflatex/README.md +39 -0
  257. package/skills/pdflatex/SKILL.md +34 -0
  258. package/skills/prd/.plugin/plugin.json +19 -0
  259. package/skills/prd/README.md +28 -0
  260. package/skills/prd/SKILL.md +237 -0
  261. package/skills/prd/commands/prd.md +8 -0
  262. package/skills/qa-changes/README.md +18 -0
  263. package/skills/qa-changes/SKILL.md +229 -0
  264. package/skills/qa-changes/commands/qa-changes.md +8 -0
  265. package/skills/release-notes/README.md +24 -0
  266. package/skills/release-notes/SKILL.md +19 -0
  267. package/skills/release-notes/commands/release-notes.md +8 -0
  268. package/skills/research-brief/.plugin/plugin.json +20 -0
  269. package/skills/research-brief/README.md +34 -0
  270. package/skills/research-brief/SKILL.md +99 -0
  271. package/skills/research-brief/commands/research-brief:setup.md +8 -0
  272. package/skills/security/.plugin/plugin.json +18 -0
  273. package/skills/security/README.md +38 -0
  274. package/skills/security/SKILL.md +33 -0
  275. package/skills/skill-creator/.plugin/plugin.json +17 -0
  276. package/skills/skill-creator/LICENSE.txt +202 -0
  277. package/skills/skill-creator/README.md +182 -0
  278. package/skills/skill-creator/SKILL.md +545 -0
  279. package/skills/skill-creator/references/output-patterns.md +82 -0
  280. package/skills/skill-creator/references/workflows.md +28 -0
  281. package/skills/skill-creator/scripts/init_skill.py +303 -0
  282. package/skills/skill-creator/scripts/quick_validate.py +95 -0
  283. package/skills/slack-channel-monitor/.plugin/plugin.json +21 -0
  284. package/skills/slack-channel-monitor/README.md +91 -0
  285. package/skills/slack-channel-monitor/SKILL.md +276 -0
  286. package/skills/slack-channel-monitor/commands/slack-monitor:poll.md +8 -0
  287. package/skills/slack-channel-monitor/references/slack-api.md +207 -0
  288. package/skills/slack-channel-monitor/references/state-schema.md +180 -0
  289. package/skills/slack-channel-monitor/scripts/main.py +962 -0
  290. package/skills/slack-standup-digest/.plugin/plugin.json +21 -0
  291. package/skills/slack-standup-digest/README.md +34 -0
  292. package/skills/slack-standup-digest/SKILL.md +92 -0
  293. package/skills/slack-standup-digest/commands/standup-digest:setup.md +8 -0
  294. package/skills/spark-version-upgrade/.plugin/plugin.json +20 -0
  295. package/skills/spark-version-upgrade/README.md +54 -0
  296. package/skills/spark-version-upgrade/SKILL.md +233 -0
  297. package/skills/ssh/.plugin/plugin.json +18 -0
  298. package/skills/ssh/README.md +140 -0
  299. package/skills/ssh/SKILL.md +135 -0
  300. package/skills/swift-linux/.plugin/plugin.json +17 -0
  301. package/skills/swift-linux/README.md +86 -0
  302. package/skills/swift-linux/SKILL.md +81 -0
  303. package/skills/theme-factory/.plugin/plugin.json +19 -0
  304. package/skills/theme-factory/LICENSE.txt +202 -0
  305. package/skills/theme-factory/README.md +58 -0
  306. package/skills/theme-factory/SKILL.md +59 -0
  307. package/skills/theme-factory/theme-showcase.pdf +0 -0
  308. package/skills/theme-factory/themes/arctic-frost.md +19 -0
  309. package/skills/theme-factory/themes/botanical-garden.md +19 -0
  310. package/skills/theme-factory/themes/desert-rose.md +19 -0
  311. package/skills/theme-factory/themes/forest-canopy.md +19 -0
  312. package/skills/theme-factory/themes/golden-hour.md +19 -0
  313. package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  314. package/skills/theme-factory/themes/modern-minimalist.md +19 -0
  315. package/skills/theme-factory/themes/ocean-depths.md +19 -0
  316. package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  317. package/skills/theme-factory/themes/tech-innovation.md +19 -0
  318. package/skills/uv/.plugin/plugin.json +18 -0
  319. package/skills/uv/README.md +5 -0
  320. package/skills/uv/SKILL.md +95 -0
  321. package/skills/uv/references/README.md +5 -0
  322. package/skills/vercel/.plugin/plugin.json +18 -0
  323. package/skills/vercel/README.md +108 -0
  324. package/skills/vercel/SKILL.md +103 -0
  325. package/tests/test_add_skill_installs_to_agents_dir.py +42 -0
  326. package/tests/test_catalogs.py +109 -0
  327. package/tests/test_code_review_risk_evaluation.py +94 -0
  328. package/tests/test_issue_duplicate_checker.py +240 -0
  329. package/tests/test_openhands_api_python.py +152 -0
  330. package/tests/test_plugin_manifest.py +83 -0
  331. package/tests/test_pr_review_diff_payload.py +202 -0
  332. package/tests/test_pr_review_feedback.py +263 -0
  333. package/tests/test_pr_review_prompt.py +152 -0
  334. package/tests/test_pr_review_review_context.py +253 -0
  335. package/tests/test_qa_changes.py +232 -0
  336. package/tests/test_qa_changes_evaluation.py +259 -0
  337. package/tests/test_release_notes_generator.py +990 -0
  338. package/tests/test_sdk_loading.py +150 -0
  339. package/tests/test_skill_plugin_loading.py +149 -0
  340. package/tests/test_skills_have_readme.py +66 -0
  341. package/tests/test_sync_extensions.py +292 -0
  342. package/tests/test_workflow_sync.py +46 -0
  343. package/utils/analysis/README.md +7 -0
  344. package/utils/analysis/laminar_signals/README.md +211 -0
  345. package/utils/analysis/laminar_signals/analyze.py +780 -0
  346. package/utils/analysis/laminar_signals/templates/default.j2 +49 -0
  347. package/utils/analysis/laminar_signals/templates/pr_review.j2 +61 -0
@@ -0,0 +1,213 @@
1
+ ---
2
+ name: linear
3
+ description: Interact with Linear project management - query issues, update status, create tickets, and manage workflows using the Linear GraphQL API. Use when working with Linear tickets, sprints, or project tracking.
4
+ triggers:
5
+ - linear
6
+ - ticket
7
+ - issue tracking
8
+ ---
9
+
10
+ # Linear
11
+
12
+ <IMPORTANT>
13
+ Before performing any Linear operations, check if the required environment variable is set:
14
+
15
+ ```bash
16
+ [ -n "$LINEAR_API_KEY" ] && echo "LINEAR_API_KEY is set" || echo "LINEAR_API_KEY is NOT set"
17
+ ```
18
+
19
+ If LINEAR_API_KEY is missing, ask the user to provide it before proceeding.
20
+ </IMPORTANT>
21
+
22
+ ## Understanding Linear Identifiers
23
+
24
+ Linear uses two types of identifiers for issues:
25
+
26
+ - **Human-readable identifier** (e.g., `ALL-1234`): Displayed to users, used in search queries. This is the team key + number.
27
+ - **UUID** (e.g., `a1b2c3d4-e5f6-7890-abcd-ef1234567890`): Required for all mutations (update, comment, etc.). Returned as `id` in query results.
28
+
29
+ **Important workflow**: When working with issues, you must:
30
+ 1. Search or query using the human-readable identifier
31
+ 2. Extract the `id` (UUID) from the query result
32
+ 3. Use the UUID in any mutation operations
33
+
34
+ ## Authentication
35
+
36
+ All Linear API requests use GraphQL with the API key in the Authorization header:
37
+
38
+ ```bash
39
+ curl -s -X POST https://api.linear.app/graphql \
40
+ -H "Content-Type: application/json" \
41
+ -H "Authorization: $LINEAR_API_KEY" \
42
+ -d '{"query": "YOUR_GRAPHQL_QUERY"}'
43
+ ```
44
+
45
+ ## Common Queries
46
+
47
+ ### Get Assigned Issues (Open)
48
+
49
+ ```bash
50
+ curl -s -X POST https://api.linear.app/graphql \
51
+ -H "Content-Type: application/json" \
52
+ -H "Authorization: $LINEAR_API_KEY" \
53
+ -d '{
54
+ "query": "query { viewer { assignedIssues(first: 50, filter: { state: { type: { nin: [\"completed\", \"canceled\"] } } }) { nodes { id identifier title priority priorityLabel state { name type } description createdAt updatedAt } } } }"
55
+ }' | jq '.data.viewer.assignedIssues.nodes'
56
+ ```
57
+
58
+ ### Get Issues by Priority
59
+
60
+ Priority values: 0 = No priority, 1 = Urgent, 2 = High, 3 = Medium, 4 = Low
61
+
62
+ ```bash
63
+ curl -s -X POST https://api.linear.app/graphql \
64
+ -H "Content-Type: application/json" \
65
+ -H "Authorization: $LINEAR_API_KEY" \
66
+ -d '{
67
+ "query": "query { viewer { assignedIssues(first: 50, filter: { priority: { lte: 2 }, state: { type: { nin: [\"completed\", \"canceled\"] } } }) { nodes { id identifier title priority priorityLabel state { name } } } } }"
68
+ }' | jq '.data.viewer.assignedIssues.nodes'
69
+ ```
70
+
71
+ ### Get Issue Details
72
+
73
+ ```bash
74
+ curl -s -X POST https://api.linear.app/graphql \
75
+ -H "Content-Type: application/json" \
76
+ -H "Authorization: $LINEAR_API_KEY" \
77
+ -d '{
78
+ "query": "query { issue(id: \"ISSUE_UUID\") { id identifier title description state { name } priority assignee { name email } labels { nodes { name } } comments { nodes { body createdAt user { name } } } } }"
79
+ }' | jq '.data.issue'
80
+ ```
81
+
82
+ ### Search Issues by Identifier
83
+
84
+ ```bash
85
+ curl -s -X POST https://api.linear.app/graphql \
86
+ -H "Content-Type: application/json" \
87
+ -H "Authorization: $LINEAR_API_KEY" \
88
+ -d '{
89
+ "query": "query { issueSearch(query: \"ALL-1234\", first: 5) { nodes { id identifier title state { name } } } }"
90
+ }' | jq '.data.issueSearch.nodes'
91
+ ```
92
+
93
+ ## Common Mutations
94
+
95
+ ### Update Issue State
96
+
97
+ First, get available workflow states:
98
+ ```bash
99
+ curl -s -X POST https://api.linear.app/graphql \
100
+ -H "Content-Type: application/json" \
101
+ -H "Authorization: $LINEAR_API_KEY" \
102
+ -d '{
103
+ "query": "query { workflowStates { nodes { id name type } } }"
104
+ }' | jq '.data.workflowStates.nodes'
105
+ ```
106
+
107
+ Then update the issue:
108
+ ```bash
109
+ curl -s -X POST https://api.linear.app/graphql \
110
+ -H "Content-Type: application/json" \
111
+ -H "Authorization: $LINEAR_API_KEY" \
112
+ -d '{
113
+ "query": "mutation { issueUpdate(id: \"ISSUE_UUID\", input: { stateId: \"STATE_UUID\" }) { success issue { identifier state { name } } } }"
114
+ }' | jq '.data.issueUpdate'
115
+ ```
116
+
117
+ ### Add Comment to Issue
118
+
119
+ ```bash
120
+ curl -s -X POST https://api.linear.app/graphql \
121
+ -H "Content-Type: application/json" \
122
+ -H "Authorization: $LINEAR_API_KEY" \
123
+ -d '{
124
+ "query": "mutation { commentCreate(input: { issueId: \"ISSUE_UUID\", body: \"Your comment here\" }) { success comment { id body } } }"
125
+ }' | jq '.data.commentCreate'
126
+ ```
127
+
128
+ ### Create New Issue
129
+
130
+ ```bash
131
+ curl -s -X POST https://api.linear.app/graphql \
132
+ -H "Content-Type: application/json" \
133
+ -H "Authorization: $LINEAR_API_KEY" \
134
+ -d '{
135
+ "query": "mutation { issueCreate(input: { teamId: \"TEAM_UUID\", title: \"Issue Title\", description: \"Issue description\", priority: 2 }) { success issue { identifier title url } } }"
136
+ }' | jq '.data.issueCreate'
137
+ ```
138
+
139
+ ## End-to-End Workflow: Move Issue to "In Progress"
140
+
141
+ This example shows the complete flow to change an issue's state using its human-readable identifier:
142
+
143
+ ### Step 1: Search for the issue to get its UUID
144
+
145
+ ```bash
146
+ # Search for issue ALL-1234 and extract its UUID
147
+ curl -s -X POST https://api.linear.app/graphql \
148
+ -H "Content-Type: application/json" \
149
+ -H "Authorization: $LINEAR_API_KEY" \
150
+ -d '{
151
+ "query": "query { issueSearch(query: \"ALL-1234\", first: 1) { nodes { id identifier title state { name } } } }"
152
+ }' | jq '.data.issueSearch.nodes[0]'
153
+ # Save the "id" value (UUID) from the response
154
+ ```
155
+
156
+ ### Step 2: Get available workflow states
157
+
158
+ ```bash
159
+ # List all workflow states to find the "In Progress" state UUID
160
+ curl -s -X POST https://api.linear.app/graphql \
161
+ -H "Content-Type: application/json" \
162
+ -H "Authorization: $LINEAR_API_KEY" \
163
+ -d '{
164
+ "query": "query { workflowStates { nodes { id name type } } }"
165
+ }' | jq '.data.workflowStates.nodes[] | select(.name == "In Progress")'
166
+ # Save the "id" value of the desired state
167
+ ```
168
+
169
+ ### Step 3: Update the issue state
170
+
171
+ ```bash
172
+ # Use the issue UUID and state UUID from previous steps
173
+ curl -s -X POST https://api.linear.app/graphql \
174
+ -H "Content-Type: application/json" \
175
+ -H "Authorization: $LINEAR_API_KEY" \
176
+ -d '{
177
+ "query": "mutation { issueUpdate(id: \"ISSUE_UUID_FROM_STEP_1\", input: { stateId: \"STATE_UUID_FROM_STEP_2\" }) { success issue { identifier state { name } } } }"
178
+ }' | jq '.data.issueUpdate'
179
+ ```
180
+
181
+ ## Get Team Information
182
+
183
+ ```bash
184
+ curl -s -X POST https://api.linear.app/graphql \
185
+ -H "Content-Type: application/json" \
186
+ -H "Authorization: $LINEAR_API_KEY" \
187
+ -d '{
188
+ "query": "query { teams { nodes { id name key } } }"
189
+ }' | jq '.data.teams.nodes'
190
+ ```
191
+
192
+ ## Priority Levels
193
+
194
+ | Priority | Label | Recommended Action |
195
+ |----------|-------|-------------------|
196
+ | 1 | Urgent | Work on immediately |
197
+ | 2 | High | Work on first |
198
+ | 3 | Medium | Normal priority |
199
+ | 4 | Low | When time permits |
200
+ | 0 | None | Backlog |
201
+
202
+ ## State Types
203
+
204
+ - `backlog` - Not yet started
205
+ - `unstarted` - Todo
206
+ - `started` - In Progress
207
+ - `completed` - Done
208
+ - `canceled` - Won't do
209
+
210
+ ## Documentation
211
+
212
+ - [Linear API Documentation](https://developers.linear.app/docs/graphql/working-with-the-graphql-api)
213
+ - [GraphQL Schema Reference](https://studio.apollographql.com/public/Linear-API/variant/current/schema/reference)
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "linear-triage",
3
+ "version": "1.0.0",
4
+ "description": "Create an automation that triages new Linear issues by inspecting title, description, team, and recent related issues. Suggests labels, priority, likely owner, and potential duplicates, then posts a clarifying comment.",
5
+ "author": {
6
+ "name": "OpenHands",
7
+ "email": "contact@all-hands.dev"
8
+ },
9
+ "homepage": "https://github.com/OpenHands/extensions",
10
+ "repository": "https://github.com/OpenHands/extensions",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "linear",
14
+ "triage",
15
+ "issues",
16
+ "labels",
17
+ "priority",
18
+ "automation",
19
+ "integration"
20
+ ]
21
+ }
@@ -0,0 +1,34 @@
1
+ # Linear Issue Triage
2
+
3
+ Create an automation that triages new Linear issues with labels, priority, and owner suggestions.
4
+
5
+ ## Triggers
6
+
7
+ This skill is activated by keywords:
8
+
9
+ - `triage Linear issues`
10
+ - `auto-label Linear`
11
+ - `Linear triage automation`
12
+
13
+ ## Features
14
+
15
+ - **Inspects issue title, description, team, and customer context**
16
+ - **Suggests labels, priority, and likely owner**
17
+ - **Detects potential duplicate issues**
18
+ - **Posts a triage comment with rationale**
19
+ - **Configurable**: auto-apply changes or suggest for approval
20
+
21
+ ## Prerequisites
22
+
23
+ Linear MCP installed in Settings → MCP
24
+
25
+ ## Quick Start
26
+
27
+ Ask OpenHands:
28
+
29
+ > "Set up a triage automation for the Engineering team in Linear that
30
+ > suggests labels and priority for new issues"
31
+
32
+ ## See Also
33
+
34
+ - [SKILL.md](SKILL.md) — Full setup workflow reference
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: linear-triage
3
+ description: >
4
+ Create an automation that triages new Linear issues. Inspects the issue
5
+ title, description, team, customer, priority, and recent related issues via
6
+ Linear MCP. Suggests labels, priority, likely owner, duplicates, and posts
7
+ a clarifying comment.
8
+ triggers:
9
+ - /linear-triage:setup
10
+ ---
11
+
12
+ # Linear Issue Triage Automation
13
+
14
+ Set up an automation that triages new Linear issues — classifying, labeling,
15
+ and suggesting owners automatically.
16
+
17
+ ---
18
+
19
+ ## Prerequisites
20
+
21
+ ### Required integration
22
+
23
+ - **Linear MCP** must be installed in Settings → MCP.
24
+
25
+ ### Information to collect
26
+
27
+ Ask the user for:
28
+
29
+ 1. **Teams/projects** — which Linear teams or projects should be triaged (e.g. `Engineering`, `Support`)
30
+ 2. **Label taxonomy** — what labels are used for classification? (e.g. `bug`, `feature`, `support`, `chore`)
31
+ 3. **Priority conventions** — how does the team use priority levels? Any mapping rules?
32
+ 4. **Auto-apply or suggest** — should the automation apply labels/priority/assignee directly, or post a triage comment with suggestions for human approval?
33
+ 5. **Duplicate detection** — should it search for and flag potential duplicate issues?
34
+
35
+ ---
36
+
37
+ ## Setup Workflow
38
+
39
+ ### Step 1 — Verify Linear MCP access
40
+
41
+ Confirm the Linear MCP integration is working:
42
+ ```
43
+ Use the Linear MCP to list recent issues for one of the target teams.
44
+ ```
45
+
46
+ If it fails, tell the user to install the Linear MCP integration first.
47
+
48
+ ### Step 2 — Determine trigger type
49
+
50
+ **Event-based (recommended if publicly reachable):**
51
+ Check `<RUNTIME_SERVICES>` for deployment reachability. If public, recommend an event trigger on Linear `Issue` create events.
52
+
53
+ **Cron-based (local/private deployments):**
54
+ Poll for recently created issues on a schedule (e.g. every 5 minutes).
55
+
56
+ ### Step 3 — Build the triage prompt
57
+
58
+ Construct a prompt that includes:
59
+ - Target teams/projects
60
+ - Label taxonomy and classification rules
61
+ - Priority mapping conventions
62
+ - Whether to auto-apply or suggest
63
+ - Duplicate detection preference
64
+
65
+ ### Step 4 — Create the automation
66
+
67
+ Read the Automation backend URL and auth from `<RUNTIME_SERVICES>`:
68
+ - Use the **Automation backend** `url_from_agent` as `OPENHANDS_HOST`
69
+ - Auth: `X-Session-API-Key: $OPENHANDS_AUTOMATION_API_KEY`
70
+
71
+ Use the **prompt preset** endpoint:
72
+ ```bash
73
+ curl -s -X POST "${OPENHANDS_HOST}/api/automation/v1/preset/prompt" \
74
+ -H "X-Session-API-Key: $OPENHANDS_AUTOMATION_API_KEY" \
75
+ -H "Content-Type: application/json" \
76
+ -d '{
77
+ "name": "Linear Issue Triage",
78
+ "prompt": "<constructed triage prompt>",
79
+ "trigger": <trigger config from step 2>
80
+ }'
81
+ ```
82
+
83
+ ### Step 5 — Confirm
84
+
85
+ Tell the user:
86
+ > ✅ **Linear Issue Triage** is running!
87
+ >
88
+ > - Automation ID: `{id}`
89
+ > - Teams: `{team list}`
90
+ > - Mode: `{auto-apply or suggest}`
91
+ > - Trigger: `{trigger description}`
@@ -0,0 +1,8 @@
1
+ ---
2
+ # auto-generated by sync_extensions.py
3
+ description: Create an automation that triages new Linear issues. Inspects the issue title, description, team, customer, priority, and recent related issues via Linear MCP. Suggests labels, priority, likely owner, duplicates, and posts a clarifying comment.
4
+ ---
5
+
6
+ Read and follow the complete instructions in the SKILL.md file located in this skill's directory.
7
+
8
+ $ARGUMENTS
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "notion",
3
+ "version": "1.0.0",
4
+ "description": "Create, search, and update Notion pages/databases using the Notion API. Use for documenting work, generating runbooks, and automating knowledge base updates.",
5
+ "author": {
6
+ "name": "OpenHands",
7
+ "email": "contact@all-hands.dev"
8
+ },
9
+ "homepage": "https://github.com/OpenHands/extensions",
10
+ "repository": "https://github.com/OpenHands/extensions",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "notion",
14
+ "documentation",
15
+ "knowledge-base"
16
+ ]
17
+ }
@@ -0,0 +1,114 @@
1
+ # Notion
2
+
3
+ Create, search, and update Notion pages/databases using the Notion API. Use for documenting work, generating runbooks, and automating knowledge base updates.
4
+
5
+ ## Triggers
6
+
7
+ This skill is activated by the following keywords:
8
+
9
+ - `notion`
10
+
11
+ ## Details
12
+
13
+ # Notion
14
+
15
+ <IMPORTANT>
16
+ If authenticated Notion MCP tools are available in the environment, use them first. MCP tools do not require passing `NOTION_INTEGRATION_KEY` as a tool argument; authentication is handled by the configured MCP integration.
17
+
18
+ Use the direct Notion REST API examples below only when MCP is unavailable or when you explicitly need raw API/curl access. For that direct-API path, first check whether the required environment variable is set:
19
+
20
+ ```bash
21
+ [ -n "$NOTION_INTEGRATION_KEY" ] && echo "NOTION_INTEGRATION_KEY is set" || echo "NOTION_INTEGRATION_KEY is NOT set"
22
+ ```
23
+
24
+ If it’s missing and you need the direct API path, ask the user to provide it (or connect a Notion integration) before proceeding:
25
+ - **NOTION_INTEGRATION_KEY**: Notion integration secret (starts with `ntn_...`)
26
+
27
+ Whether you use MCP or the direct API, also confirm the configured integration has been **shared** with the target page/database in Notion.
28
+ </IMPORTANT>
29
+
30
+ ## Base headers for direct API calls
31
+
32
+ ```bash
33
+ -H "Authorization: Bearer ${NOTION_INTEGRATION_KEY}" \
34
+ -H "Notion-Version: 2022-06-28" \
35
+ -H "Content-Type: application/json"
36
+ ```
37
+
38
+ ## Find a page (search)
39
+
40
+ Use Notion’s search endpoint to find a page by title.
41
+
42
+ ```bash
43
+ curl -s https://api.notion.com/v1/search \
44
+ -H "Authorization: Bearer ${NOTION_INTEGRATION_KEY}" \
45
+ -H "Notion-Version: 2022-06-28" \
46
+ -H "Content-Type: application/json" \
47
+ -d '{
48
+ "query": "OpenHands Wiki",
49
+ "page_size": 10
50
+ }' | jq .
51
+ ```
52
+
53
+ ## Create a page under a parent page
54
+
55
+ ```bash
56
+ PARENT_PAGE_ID="<parent_page_id>"
57
+
58
+ curl -s https://api.notion.com/v1/pages \
59
+ -H "Authorization: Bearer ${NOTION_INTEGRATION_KEY}" \
60
+ -H "Notion-Version: 2022-06-28" \
61
+ -H "Content-Type: application/json" \
62
+ -d '{
63
+ "parent": {"type": "page_id", "page_id": "'"${PARENT_PAGE_ID}"'"},
64
+ "properties": {
65
+ "title": {
66
+ "title": [{"type": "text", "text": {"content": "My new page"}}]
67
+ }
68
+ },
69
+ "children": [
70
+ {
71
+ "object": "block",
72
+ "type": "paragraph",
73
+ "paragraph": {
74
+ "rich_text": [{"type": "text", "text": {"content": "Hello from OpenHands."}}]
75
+ }
76
+ }
77
+ ]
78
+ }' | jq .
79
+ ```
80
+
81
+ ## Append blocks to an existing page
82
+
83
+ Use the page’s block id (same as page id) to append children.
84
+
85
+ ```bash
86
+ PAGE_ID="<page_id>"
87
+
88
+ curl -s -X PATCH "https://api.notion.com/v1/blocks/${PAGE_ID}/children" \
89
+ -H "Authorization: Bearer ${NOTION_INTEGRATION_KEY}" \
90
+ -H "Notion-Version: 2022-06-28" \
91
+ -H "Content-Type: application/json" \
92
+ -d '{
93
+ "children": [
94
+ {
95
+ "object": "block",
96
+ "type": "heading_2",
97
+ "heading_2": {"rich_text": [{"type": "text", "text": {"content": "Appended section"}}]}
98
+ }
99
+ ]
100
+ }' | jq .
101
+ ```
102
+
103
+ ## Tips / gotchas
104
+
105
+ - **Sharing is required**: even with a valid key, the integration can’t see a page/database until it has been shared with the integration in the Notion UI.
106
+ - **Rate limits**: keep requests small; for large pages, create the page first and then append blocks in batches.
107
+ - **IDs format**: Notion IDs may be returned with dashes; both dashed and non-dashed forms typically work in API calls.
108
+
109
+ ## Documentation
110
+
111
+ - Notion API: https://developers.notion.com/reference/intro
112
+ - Search: https://developers.notion.com/reference/post-search
113
+ - Create a page: https://developers.notion.com/reference/post-page
114
+ - Append block children: https://developers.notion.com/reference/patch-block-children
@@ -0,0 +1,109 @@
1
+ ---
2
+ name: notion
3
+ description: Create, search, and update Notion pages/databases using the Notion API. Use for documenting work, generating runbooks, and automating knowledge base updates.
4
+ triggers:
5
+ - notion
6
+ ---
7
+
8
+ # Notion
9
+
10
+ <IMPORTANT>
11
+ If authenticated Notion MCP tools are available in the environment, use them first. MCP tools do not require passing `NOTION_INTEGRATION_KEY` as a tool argument; authentication is handled by the configured MCP integration.
12
+
13
+ Use the direct Notion REST API examples below only when MCP is unavailable or when you explicitly need raw API/curl access. For that direct-API path, first check whether the required environment variable is set:
14
+
15
+ ```bash
16
+ [ -n "$NOTION_INTEGRATION_KEY" ] && echo "NOTION_INTEGRATION_KEY is set" || echo "NOTION_INTEGRATION_KEY is NOT set"
17
+ ```
18
+
19
+ If it’s missing and you need the direct API path, ask the user to provide it (or connect a Notion integration) before proceeding:
20
+ - **NOTION_INTEGRATION_KEY**: Notion integration secret (starts with `ntn_...`)
21
+
22
+ Whether you use MCP or the direct API, also confirm the configured integration has been **shared** with the target page/database in Notion.
23
+ </IMPORTANT>
24
+
25
+ ## Base headers for direct API calls
26
+
27
+ ```bash
28
+ -H "Authorization: Bearer ${NOTION_INTEGRATION_KEY}" \
29
+ -H "Notion-Version: 2022-06-28" \
30
+ -H "Content-Type: application/json"
31
+ ```
32
+
33
+ ## Find a page (search)
34
+
35
+ Use Notion’s search endpoint to find a page by title.
36
+
37
+ ```bash
38
+ curl -s https://api.notion.com/v1/search \
39
+ -H "Authorization: Bearer ${NOTION_INTEGRATION_KEY}" \
40
+ -H "Notion-Version: 2022-06-28" \
41
+ -H "Content-Type: application/json" \
42
+ -d '{
43
+ "query": "OpenHands Wiki",
44
+ "page_size": 10
45
+ }' | jq .
46
+ ```
47
+
48
+ ## Create a page under a parent page
49
+
50
+ ```bash
51
+ PARENT_PAGE_ID="<parent_page_id>"
52
+
53
+ curl -s https://api.notion.com/v1/pages \
54
+ -H "Authorization: Bearer ${NOTION_INTEGRATION_KEY}" \
55
+ -H "Notion-Version: 2022-06-28" \
56
+ -H "Content-Type: application/json" \
57
+ -d '{
58
+ "parent": {"type": "page_id", "page_id": "'"${PARENT_PAGE_ID}"'"},
59
+ "properties": {
60
+ "title": {
61
+ "title": [{"type": "text", "text": {"content": "My new page"}}]
62
+ }
63
+ },
64
+ "children": [
65
+ {
66
+ "object": "block",
67
+ "type": "paragraph",
68
+ "paragraph": {
69
+ "rich_text": [{"type": "text", "text": {"content": "Hello from OpenHands."}}]
70
+ }
71
+ }
72
+ ]
73
+ }' | jq .
74
+ ```
75
+
76
+ ## Append blocks to an existing page
77
+
78
+ Use the page’s block id (same as page id) to append children.
79
+
80
+ ```bash
81
+ PAGE_ID="<page_id>"
82
+
83
+ curl -s -X PATCH "https://api.notion.com/v1/blocks/${PAGE_ID}/children" \
84
+ -H "Authorization: Bearer ${NOTION_INTEGRATION_KEY}" \
85
+ -H "Notion-Version: 2022-06-28" \
86
+ -H "Content-Type: application/json" \
87
+ -d '{
88
+ "children": [
89
+ {
90
+ "object": "block",
91
+ "type": "heading_2",
92
+ "heading_2": {"rich_text": [{"type": "text", "text": {"content": "Appended section"}}]}
93
+ }
94
+ ]
95
+ }' | jq .
96
+ ```
97
+
98
+ ## Tips / gotchas
99
+
100
+ - **Sharing is required**: even with a valid key, the integration can’t see a page/database until it has been shared with the integration in the Notion UI.
101
+ - **Rate limits**: keep requests small; for large pages, create the page first and then append blocks in batches.
102
+ - **IDs format**: Notion IDs may be returned with dashes; both dashed and non-dashed forms typically work in API calls.
103
+
104
+ ## Documentation
105
+
106
+ - Notion API: https://developers.notion.com/reference/intro
107
+ - Search: https://developers.notion.com/reference/post-search
108
+ - Create a page: https://developers.notion.com/reference/post-page
109
+ - Append block children: https://developers.notion.com/reference/patch-block-children
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "npm",
3
+ "version": "1.0.0",
4
+ "description": "Handle npm package installation in non-interactive environments by piping confirmations. Use when installing Node.js packages that require user confirmation prompts.",
5
+ "author": {
6
+ "name": "OpenHands",
7
+ "email": "contact@all-hands.dev"
8
+ },
9
+ "homepage": "https://github.com/OpenHands/extensions",
10
+ "repository": "https://github.com/OpenHands/extensions",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "npm",
14
+ "nodejs",
15
+ "packages"
16
+ ]
17
+ }
@@ -0,0 +1,14 @@
1
+ # Npm
2
+
3
+ Handle npm package installation in non-interactive environments by piping confirmations. Use when installing Node.js packages that require user confirmation prompts.
4
+
5
+ ## Triggers
6
+
7
+ This skill is activated by the following keywords:
8
+
9
+ - `npm`
10
+
11
+ ## Details
12
+
13
+ When using npm to install packages, you will not be able to use an interactive shell, and it may be hard to confirm your actions.
14
+ As an alternative, you can pipe in the output of the unix "yes" command to confirm your actions.
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: npm
3
+ description: Handle npm package installation in non-interactive environments by piping confirmations. Use when installing Node.js packages that require user confirmation prompts.
4
+ triggers:
5
+ - npm
6
+ ---
7
+
8
+ When using npm to install packages, you will not be able to use an interactive shell, and it may be hard to confirm your actions.
9
+ As an alternative, you can pipe in the output of the unix "yes" command to confirm your actions.
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "openhands-api",
3
+ "version": "1.0.0",
4
+ "description": "Use the OpenHands Cloud REST API (V1) to create and manage app conversations, including multi-conversation delegation workflows, and to access sandbox agent-server endpoints. Includes minimal Pytho...",
5
+ "author": {
6
+ "name": "OpenHands",
7
+ "email": "contact@all-hands.dev"
8
+ },
9
+ "homepage": "https://github.com/OpenHands/extensions",
10
+ "repository": "https://github.com/OpenHands/extensions",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "openhands",
14
+ "api",
15
+ "cloud",
16
+ "automation",
17
+ "delegation",
18
+ "agent-server",
19
+ "sandbox",
20
+ "conversations"
21
+ ]
22
+ }