@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,21 @@
1
+ {
2
+ "name": "slack-standup-digest",
3
+ "version": "1.0.0",
4
+ "description": "Create an automation that generates an async standup digest from Slack. Searches selected channels for messages since the previous workday, groups updates by project, highlights blockers and decisions, and posts a summary to a target channel.",
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
+ "slack",
14
+ "standup",
15
+ "digest",
16
+ "summary",
17
+ "daily",
18
+ "cron",
19
+ "automation"
20
+ ]
21
+ }
@@ -0,0 +1,34 @@
1
+ # Slack Standup Digest
2
+
3
+ Create an automation that generates an async standup digest from Slack channels.
4
+
5
+ ## Triggers
6
+
7
+ This skill is activated by keywords:
8
+
9
+ - `standup digest`
10
+ - `daily summary from Slack`
11
+ - `async standup automation`
12
+
13
+ ## Features
14
+
15
+ - **Scans selected Slack channels for recent messages**
16
+ - **Groups updates by project with blockers and decisions highlighted**
17
+ - **Configurable schedule and timezone**
18
+ - **Auto-post or draft mode for review before posting**
19
+ - **Smart lookback**: Friday→Monday for weekend gaps
20
+
21
+ ## Prerequisites
22
+
23
+ Slack MCP installed in Settings → MCP
24
+
25
+ ## Quick Start
26
+
27
+ Ask OpenHands:
28
+
29
+ > "Set up a daily standup digest that summarizes #engineering and
30
+ > #frontend channels and posts to #standup at 9 AM ET"
31
+
32
+ ## See Also
33
+
34
+ - [SKILL.md](SKILL.md) — Full setup workflow reference
@@ -0,0 +1,92 @@
1
+ ---
2
+ name: slack-standup-digest
3
+ description: >
4
+ Create an automation that generates an async standup digest from Slack.
5
+ Searches selected channels for messages since the previous workday, groups
6
+ updates by project, highlights blockers and decisions, and posts a summary
7
+ to a target channel.
8
+ triggers:
9
+ - /standup-digest:setup
10
+ ---
11
+
12
+ # Slack Standup Digest Automation
13
+
14
+ Set up a recurring automation that summarizes Slack activity into an async
15
+ standup digest.
16
+
17
+ ---
18
+
19
+ ## Prerequisites
20
+
21
+ ### Required integration
22
+
23
+ - **Slack MCP** must be installed in Settings → MCP.
24
+
25
+ ### Information to collect
26
+
27
+ Ask the user for:
28
+
29
+ 1. **Source channels** — which Slack channels to scan for updates (e.g. `#engineering`, `#frontend`, `#backend`)
30
+ 2. **Target channel** — where the digest should be posted (e.g. `#standup`, `#team-updates`)
31
+ 3. **Schedule** — when should the digest run? Default: weekday mornings at 9 AM
32
+ 4. **Timezone** — user's timezone (e.g. `America/New_York`, `Europe/London`)
33
+ 5. **Auto-post or draft** — should the digest post automatically, or be saved for the user to review and approve first?
34
+ 6. **Grouping** — how should updates be organized? Default: by project/channel, with sections for shipped work, active work, blockers, and decisions
35
+
36
+ ---
37
+
38
+ ## Setup Workflow
39
+
40
+ ### Step 1 — Verify Slack MCP access
41
+
42
+ Confirm the Slack MCP integration is working:
43
+ ```
44
+ Use the Slack MCP to search for recent messages in one of the source channels.
45
+ ```
46
+
47
+ If it fails, tell the user to install the Slack MCP integration first.
48
+
49
+ ### Step 2 — Configure the schedule
50
+
51
+ Build a cron schedule from the user's preferences:
52
+ - Weekday mornings at 9 AM ET: `0 9 * * 1-5` with timezone `America/New_York`
53
+ - Daily at 8 AM UTC: `0 8 * * *`
54
+
55
+ ### Step 3 — Build the digest prompt
56
+
57
+ Construct a prompt that includes:
58
+ - Source channels to scan
59
+ - Target channel for posting
60
+ - Lookback window (typically "since previous workday" — Friday→Monday for Monday digests)
61
+ - Grouping structure (by project, by channel, etc.)
62
+ - Whether to auto-post or draft
63
+ - What to highlight: blockers, decisions, shipped items, unanswered questions
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": "Slack Standup Digest",
78
+ "prompt": "<constructed digest prompt>",
79
+ "trigger": {"type": "cron", "schedule": "<schedule>", "timezone": "<tz>"}
80
+ }'
81
+ ```
82
+
83
+ ### Step 5 — Confirm
84
+
85
+ Tell the user:
86
+ > ✅ **Slack Standup Digest** is running!
87
+ >
88
+ > - Automation ID: `{id}`
89
+ > - Source channels: `{channel list}`
90
+ > - Target channel: `{target}`
91
+ > - Schedule: `{cron description}`
92
+ > - Mode: `{auto-post or draft}`
@@ -0,0 +1,8 @@
1
+ ---
2
+ # auto-generated by sync_extensions.py
3
+ description: Create an automation that generates an async standup digest from Slack. Searches selected channels for messages since the previous workday, groups updates by project, highlights blockers and decisions, and posts a summary to a target channel.
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,20 @@
1
+ {
2
+ "name": "spark-version-upgrade",
3
+ "version": "1.0.0",
4
+ "description": "Upgrade Apache Spark applications between major versions (2.x\u21923.x, 3.x\u21924.x). Covers build files, deprecated APIs, configuration changes, SQL/DataFrame updates, and test validation.",
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
+ "spark",
14
+ "upgrade",
15
+ "migration",
16
+ "pyspark",
17
+ "scala",
18
+ "big-data"
19
+ ]
20
+ }
@@ -0,0 +1,54 @@
1
+ # spark-version-upgrade
2
+
3
+ Upgrade Apache Spark applications between major versions (2.x→3.x, 3.x→4.x). Covers build files, deprecated APIs, configuration changes, SQL/DataFrame updates, and test validation.
4
+
5
+ ## Triggers
6
+
7
+ This skill is activated by the following keywords:
8
+
9
+ - `spark upgrade`
10
+ - `spark migration`
11
+ - `spark version`
12
+ - `upgrade spark`
13
+ - `spark 3`
14
+ - `spark 4`
15
+ - `pyspark upgrade`
16
+
17
+ ## Overview
18
+
19
+ This skill provides a structured, six-phase workflow for upgrading Apache Spark applications:
20
+
21
+ | Phase | Description |
22
+ |-------|-------------|
23
+ | 1. Inventory & Impact Analysis | Scan the codebase, identify Spark usage, document scope |
24
+ | 2. Build File Updates | Bump Spark/Scala/Java versions in Maven, SBT, Gradle, or pip |
25
+ | 3. API Migration | Replace removed/deprecated APIs (SQLContext, Accumulator, etc.) |
26
+ | 4. Configuration Migration | Rename/remove deprecated Spark config properties |
27
+ | 5. SQL & DataFrame Migration | Fix breaking SQL behavior (ANSI mode, type coercion, date parsing) |
28
+ | 6. Test Validation | Compile, test, compare output to pre-upgrade baseline |
29
+
30
+ ## Supported Upgrade Paths
31
+
32
+ - **Spark 2.x → 3.x** — Major API removals (SQLContext, HiveContext, Accumulator v1), Scala 2.12/2.13
33
+ - **Spark 3.x → 4.x** — ANSI mode default, Java 17+ requirement, Scala 2.13 only, legacy flag removal
34
+
35
+ ## Languages & Build Systems
36
+
37
+ - **Languages**: Scala, Java, Python (PySpark)
38
+ - **Build systems**: Maven, SBT, Gradle, pip/uv
39
+
40
+ ## Reference Material
41
+
42
+ - [Apache Spark Migration Guide](https://spark.apache.org/docs/latest/migration-guide.html) — The official, up-to-date guide covering API removals, configuration changes, SQL behavior, PySpark, Structured Streaming, and MLlib for every Spark release
43
+
44
+ ## Example Usage
45
+
46
+ Ask the agent:
47
+
48
+ > "Upgrade this project from Spark 2.4 to Spark 3.5"
49
+
50
+ > "Migrate our PySpark codebase to Spark 4.0"
51
+
52
+ > "Fix all Spark deprecation warnings in this repo"
53
+
54
+ The agent will follow the six-phase workflow, producing a `spark_upgrade_impact.md` document and systematically updating build files, code, configuration, and SQL queries.
@@ -0,0 +1,233 @@
1
+ ---
2
+ name: spark-version-upgrade
3
+ description: Upgrade Apache Spark applications between major versions (2.x→3.x, 3.x→4.x). Covers build files, deprecated APIs, configuration changes, SQL/DataFrame updates, and test validation.
4
+ license: MIT
5
+ compatibility: Requires Java 8+/11+/17+, Scala 2.12/2.13, Maven/Gradle/SBT, Apache Spark
6
+ triggers:
7
+ - spark upgrade
8
+ - spark migration
9
+ - spark version
10
+ - upgrade spark
11
+ - spark 3
12
+ - spark 4
13
+ - pyspark upgrade
14
+ ---
15
+
16
+ Upgrade Apache Spark applications between major versions with a structured, phase-by-phase workflow.
17
+
18
+ ## When to Use
19
+
20
+ - Migrating from Spark 2.x → 3.x or Spark 3.x → 4.x
21
+ - Updating PySpark, Spark SQL, or Structured Streaming applications
22
+ - Resolving deprecation warnings before a Spark version bump
23
+
24
+ ## Workflow Overview
25
+
26
+ 1. **Inventory & Impact Analysis** — Scan the codebase and assess scope
27
+ 2. **Build File Updates** — Bump Spark/Scala/Java dependencies
28
+ 3. **API Migration** — Replace deprecated and removed APIs
29
+ 4. **Configuration Migration** — Update Spark config properties
30
+ 5. **SQL & DataFrame Migration** — Fix query-level breaking changes
31
+ 6. **Test Validation** — Compile, run tests, verify results
32
+
33
+ ---
34
+
35
+ ## Phase 1: Inventory & Impact Analysis
36
+
37
+ Before changing any code, assess what needs to change. Read the official Apache Spark migration guide for the target version — it documents every API removal, config rename, and behavioral change per release:
38
+ https://spark.apache.org/docs/latest/migration-guide.html
39
+
40
+ ### Checklist
41
+
42
+ - [ ] Read the migration guide section for the target Spark version
43
+ - [ ] Identify current Spark version (check `pom.xml`, `build.sbt`, `build.gradle`, or `requirements.txt`)
44
+ - [ ] Identify target Spark version
45
+ - [ ] Search for deprecated APIs: `grep -rn 'import org.apache.spark' --include='*.scala' --include='*.java' --include='*.py'`
46
+ - [ ] List all Spark config properties: `grep -rn 'spark\.' --include='*.conf' --include='*.properties' --include='*.scala' --include='*.java' --include='*.py' | grep -v 'test'`
47
+ - [ ] Check for custom `SparkSession` or `SparkContext` extensions
48
+ - [ ] Identify connector dependencies (Hive, Kafka, Cassandra, Delta, Iceberg)
49
+ - [ ] Document findings in `spark_upgrade_impact.md`
50
+
51
+ ### Output
52
+
53
+ ```
54
+ spark_upgrade_impact.md # Summary of affected files, APIs, and configs
55
+ ```
56
+
57
+ ---
58
+
59
+ ## Phase 2: Build File Updates
60
+
61
+ Update dependency versions and resolve compilation.
62
+
63
+ ### Maven (`pom.xml`)
64
+
65
+ ```xml
66
+ <!-- Update Spark version property -->
67
+ <spark.version>3.5.1</spark.version> <!-- or 4.0.0 -->
68
+ <scala.version>2.13.12</scala.version> <!-- Spark 3.x: 2.12/2.13; Spark 4.x: 2.13 -->
69
+
70
+ <!-- Update artifact IDs if Scala cross-version changed -->
71
+ <artifactId>spark-core_2.13</artifactId>
72
+ <artifactId>spark-sql_2.13</artifactId>
73
+ ```
74
+
75
+ ### SBT (`build.sbt`)
76
+
77
+ ```scala
78
+ val sparkVersion = "3.5.1" // or "4.0.0"
79
+ scalaVersion := "2.13.12"
80
+
81
+ libraryDependencies += "org.apache.spark" %% "spark-core" % sparkVersion
82
+ libraryDependencies += "org.apache.spark" %% "spark-sql" % sparkVersion
83
+ ```
84
+
85
+ ### Gradle (`build.gradle`)
86
+
87
+ ```groovy
88
+ ext {
89
+ sparkVersion = '3.5.1' // or '4.0.0'
90
+ }
91
+ dependencies {
92
+ implementation "org.apache.spark:spark-core_2.13:${sparkVersion}"
93
+ implementation "org.apache.spark:spark-sql_2.13:${sparkVersion}"
94
+ }
95
+ ```
96
+
97
+ ### PySpark (`requirements.txt` / `pyproject.toml`)
98
+
99
+ ```
100
+ pyspark==3.5.1 # or 4.0.0
101
+ ```
102
+
103
+ ### Checklist
104
+
105
+ - [ ] Update Spark version in build file
106
+ - [ ] Update Scala version if crossing 2.12→2.13 boundary
107
+ - [ ] Update Java source/target level if required (Spark 4.x requires Java 17+)
108
+ - [ ] Update connector library versions to match new Spark version
109
+ - [ ] Resolve dependency conflicts (`mvn dependency:tree` / `sbt dependencyTree`)
110
+ - [ ] Confirm project compiles (errors at this stage are expected — they guide Phase 3)
111
+
112
+ ---
113
+
114
+ ## Phase 3: API Migration
115
+
116
+ Replace removed and deprecated APIs. Work through compiler errors systematically.
117
+
118
+ ### Common Patterns
119
+
120
+ Consult the official Apache Spark migration guide for the complete list of changes for each version:
121
+ https://spark.apache.org/docs/latest/migration-guide.html
122
+
123
+ #### SparkSession Creation (2.x → 3.x)
124
+
125
+ ```scala
126
+ // BEFORE (Spark 1.x/2.x)
127
+ val sc = new SparkContext(conf)
128
+ val sqlContext = new SQLContext(sc)
129
+
130
+ // AFTER (Spark 2.x+/3.x)
131
+ val spark = SparkSession.builder()
132
+ .config(conf)
133
+ .enableHiveSupport() // if needed
134
+ .getOrCreate()
135
+ val sc = spark.sparkContext
136
+ ```
137
+
138
+ #### RDD to DataFrame (2.x → 3.x)
139
+
140
+ ```scala
141
+ // BEFORE
142
+ rdd.toDF() // implicit from SQLContext
143
+
144
+ // AFTER
145
+ import spark.implicits._
146
+ rdd.toDF() // implicit from SparkSession
147
+ ```
148
+
149
+ #### Accumulator API (2.x → 3.x)
150
+
151
+ ```scala
152
+ // BEFORE
153
+ val acc = sc.accumulator(0)
154
+
155
+ // AFTER
156
+ val acc = sc.longAccumulator("name")
157
+ ```
158
+
159
+ ### Checklist
160
+
161
+ - [ ] Replace `SQLContext` / `HiveContext` with `SparkSession`
162
+ - [ ] Replace deprecated `Accumulator` with `AccumulatorV2`
163
+ - [ ] Update `DataFrame` → `Dataset[Row]` where needed
164
+ - [ ] Replace removed `RDD.mapPartitionsWithContext` with `mapPartitions`
165
+ - [ ] Fix `SparkConf` deprecated setters
166
+ - [ ] Update custom `UserDefinedFunction` registration
167
+ - [ ] Migrate `Experimental` / `DeveloperApi` usages that were removed
168
+ - [ ] Verify all compilation errors from Phase 2 are resolved
169
+
170
+ ---
171
+
172
+ ## Phase 4: Configuration Migration
173
+
174
+ Spark renames and removes configuration properties between versions. The official migration guide documents every renamed and removed property per release:
175
+ https://spark.apache.org/docs/latest/migration-guide.html
176
+
177
+ ### Checklist
178
+
179
+ - [ ] Rename deprecated config keys (e.g., `spark.shuffle.file.buffer.kb` → `spark.shuffle.file.buffer`)
180
+ - [ ] Update removed configs to their replacements
181
+ - [ ] Review `spark-defaults.conf`, application code, and submit scripts
182
+ - [ ] Check for hardcoded config values in test fixtures
183
+ - [ ] Verify `SparkSession.builder().config(...)` calls use current property names
184
+
185
+ ---
186
+
187
+ ## Phase 5: SQL & DataFrame Migration
188
+
189
+ Spark SQL behavior changes between versions can silently alter query results.
190
+
191
+ ### Key Breaking Changes (2.x → 3.x)
192
+
193
+ - `CAST` to integer no longer truncates silently — set `spark.sql.ansi.enabled` if needed
194
+ - `FROM` clause is required in `SELECT` (no more `SELECT 1`)
195
+ - Column resolution order changed in subqueries
196
+ - `spark.sql.legacy.timeParserPolicy` controls date/time parsing behavior
197
+
198
+ ### Key Breaking Changes (3.x → 4.x)
199
+
200
+ - ANSI mode is default (`spark.sql.ansi.enabled=true`)
201
+ - Stricter type coercion in comparisons
202
+ - `spark.sql.legacy.*` flags removed
203
+
204
+ ### Checklist
205
+
206
+ - [ ] Audit SQL strings and DataFrame expressions for changed behavior
207
+ - [ ] Add explicit `CAST` where implicit coercion relied on legacy behavior
208
+ - [ ] Update date/time format patterns to match new parser
209
+ - [ ] Test SQL queries with representative data and compare output to pre-upgrade baseline
210
+ - [ ] Set `spark.sql.legacy.*` flags temporarily if needed for phased migration
211
+
212
+ ---
213
+
214
+ ## Phase 6: Test Validation
215
+
216
+ ### Checklist
217
+
218
+ - [ ] All code compiles without errors
219
+ - [ ] All existing unit tests pass
220
+ - [ ] All existing integration tests pass
221
+ - [ ] Run Spark jobs locally with sample data and compare output to pre-upgrade baseline
222
+ - [ ] No deprecation warnings remain (or are documented with a migration timeline)
223
+ - [ ] Update CI/CD pipeline to use new Spark version
224
+ - [ ] Document any `spark.sql.legacy.*` flags that are set temporarily
225
+
226
+ ## Done When
227
+
228
+ ✓ Project compiles against target Spark version
229
+ ✓ All tests pass
230
+ ✓ No removed APIs remain in code
231
+ ✓ Configuration properties are current
232
+ ✓ SQL queries produce correct results
233
+ ✓ Upgrade impact documented in `spark_upgrade_impact.md`
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "ssh",
3
+ "version": "1.0.0",
4
+ "description": "Establish and manage SSH connections to remote machines, including key generation, configuration, and file transfers. Use when connecting to remote servers, executing remote commands, or transferri...",
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
+ "ssh",
14
+ "remote",
15
+ "scp",
16
+ "server"
17
+ ]
18
+ }
@@ -0,0 +1,140 @@
1
+ # Ssh
2
+
3
+ Establish and manage SSH connections to remote machines, including key generation, configuration, and file transfers. Use when connecting to remote servers, executing remote commands, or transferring files via SCP.
4
+
5
+ ## Triggers
6
+
7
+ This skill is activated by the following keywords:
8
+
9
+ - `ssh`
10
+ - `remote server`
11
+ - `remote machine`
12
+ - `remote host`
13
+ - `remote connection`
14
+ - `secure shell`
15
+ - `ssh keys`
16
+
17
+ ## Details
18
+
19
+ # SSH Skill
20
+
21
+ This skill provides capabilities for establishing and managing SSH connections to remote machines.
22
+
23
+ ## Capabilities
24
+
25
+ - Establish SSH connections using password or key-based authentication
26
+ - Generate and manage SSH key pairs
27
+ - Configure SSH for easier connections
28
+ - Execute commands on remote machines
29
+ - Transfer files between local and remote machines
30
+ - Manage SSH configurations and known hosts
31
+
32
+ ## Authentication Methods
33
+
34
+ ### Password Authentication
35
+
36
+ ```bash
37
+ ssh username@hostname
38
+ ```
39
+
40
+ When prompted, you should ask the user for their password or a private key.
41
+
42
+ ### Key-Based Authentication
43
+
44
+ Generate a new SSH key pair:
45
+ ```bash
46
+ ssh-keygen -t ed25519 -f ~/.ssh/key_name -C "comment" -N ""
47
+ ```
48
+
49
+ Copy the public key to the remote server:
50
+ ```bash
51
+ ssh-copy-id -i ~/.ssh/key_name.pub username@hostname
52
+ ```
53
+
54
+ Connect using the private key:
55
+ ```bash
56
+ ssh -i ~/.ssh/key_name username@hostname
57
+ ```
58
+
59
+ ## SSH Configuration
60
+
61
+ Create or edit the SSH config file for easier connections:
62
+ ```bash
63
+ mkdir -p ~/.ssh
64
+ cat > ~/.ssh/config << 'EOF'
65
+ Host alias
66
+ HostName hostname_or_ip
67
+ User username
68
+ IdentityFile ~/.ssh/key_name
69
+ Port 22
70
+ ServerAliveInterval 60
71
+ EOF
72
+ chmod 600 ~/.ssh/config
73
+ ```
74
+
75
+ Then connect using the alias:
76
+ ```bash
77
+ ssh alias
78
+ ```
79
+
80
+ ## Common SSH Options
81
+
82
+ - `-p PORT`: Connect to a specific port
83
+ - `-X`: Enable X11 forwarding
84
+ - `-L local_port:remote_host:remote_port`: Set up local port forwarding
85
+ - `-R remote_port:local_host:local_port`: Set up remote port forwarding
86
+ - `-N`: Do not execute a remote command (useful for port forwarding)
87
+ - `-f`: Run in background
88
+ - `-v`: Verbose mode (add more v's for increased verbosity)
89
+
90
+ ## File Transfer with SCP
91
+
92
+ Copy a file to the remote server:
93
+ ```bash
94
+ scp /path/to/local/file username@hostname:/path/to/remote/directory/
95
+ ```
96
+
97
+ Copy a file from the remote server:
98
+ ```bash
99
+ scp username@hostname:/path/to/remote/file /path/to/local/directory/
100
+ ```
101
+
102
+ Copy a directory recursively:
103
+ ```bash
104
+ scp -r /path/to/local/directory username@hostname:/path/to/remote/directory/
105
+ ```
106
+
107
+ ## SSH Agent
108
+
109
+ Start the SSH agent:
110
+ ```bash
111
+ eval "$(ssh-agent -s)"
112
+ ```
113
+
114
+ Add a key to the agent:
115
+ ```bash
116
+ ssh-add ~/.ssh/key_name
117
+ ```
118
+
119
+ ## Troubleshooting
120
+
121
+ - Check SSH service status on remote: `systemctl status sshd`
122
+ - Verify SSH port is open: `nc -zv hostname 22`
123
+ - Debug connection issues: `ssh -vvv username@hostname`
124
+ - Check permissions: SSH private keys should have 600 permissions (`chmod 600 ~/.ssh/key_name`)
125
+ - Verify known_hosts: If host key changed, remove the old entry with `ssh-keygen -R hostname`
126
+
127
+ ## Secure SSH Key Management
128
+
129
+ ### Local Storage with Proper Permissions
130
+
131
+ The most basic approach is to ensure proper file permissions:
132
+
133
+ ```bash
134
+ # Set correct permissions for private keys
135
+ chmod 600 ~/.ssh/id_ed25519
136
+ # Set correct permissions for public keys
137
+ chmod 644 ~/.ssh/id_ed25519.pub
138
+ # Set correct permissions for SSH directory
139
+ chmod 700 ~/.ssh
140
+ ```