@openhands/extensions 0.0.1-alpha → 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.
- package/.agents/skills/custom-codereview-guide.md +25 -0
- package/.github/pull_request_template.md +38 -0
- package/.github/release.yml +14 -0
- package/.github/workflows/check-extensions.yml +72 -0
- package/.github/workflows/npm-publish.yml +89 -0
- package/.github/workflows/pr.yml +30 -0
- package/.github/workflows/release.yml +24 -0
- package/.github/workflows/tests.yml +25 -0
- package/.github/workflows/vulnerability-scan.yml +87 -0
- package/.release-please-manifest.json +3 -0
- package/AGENTS.md +132 -0
- package/README.md +10 -0
- package/analysis_results.md +162 -0
- package/marketplaces/large-codebase.json +66 -0
- package/marketplaces/openhands-extensions.json +682 -0
- package/package.json +4 -10
- package/plugins/README.md +30 -0
- package/plugins/city-weather/.plugin/plugin.json +13 -0
- package/plugins/city-weather/README.md +145 -0
- package/plugins/city-weather/commands/now.md +56 -0
- package/plugins/cobol-modernization/.plugin/plugin.json +19 -0
- package/plugins/cobol-modernization/README.md +201 -0
- package/plugins/cobol-modernization/references/troubleshooting.md +18 -0
- package/plugins/cobol-modernization/skills/build-setup/SKILL.md +78 -0
- package/plugins/cobol-modernization/skills/build-setup/scripts/install-gnucobol.sh +32 -0
- package/plugins/cobol-modernization/skills/cobol-modernization-overview/SKILL.md +113 -0
- package/plugins/cobol-modernization/skills/mainfraime-removal/SKILL.md +62 -0
- package/plugins/cobol-modernization/skills/mainfraime-removal/references/cics-transformation-examples.md +45 -0
- package/plugins/cobol-modernization/skills/mainframe-planning/SKILL.md +78 -0
- package/plugins/cobol-modernization/skills/to-java-migration/SKILL.md +59 -0
- package/plugins/cobol-modernization/skills/to-java-migration/references/cobol-to-java-example.md +58 -0
- package/plugins/cobol-modernization/skills/to-java-migration/references/datatype-mappings.md +19 -0
- package/plugins/issue-duplicate-checker/.plugin/plugin.json +13 -0
- package/plugins/issue-duplicate-checker/README.md +51 -0
- package/plugins/issue-duplicate-checker/action.yml +349 -0
- package/plugins/issue-duplicate-checker/scripts/auto_close_duplicate_issues.py +569 -0
- package/plugins/issue-duplicate-checker/scripts/issue_duplicate_check_openhands.py +681 -0
- package/plugins/issue-duplicate-checker/scripts/post_duplicate_notice.js +220 -0
- package/plugins/issue-duplicate-checker/scripts/remove_duplicate_candidate_label.js +27 -0
- package/plugins/magic-test/.plugin/plugin.json +13 -0
- package/plugins/magic-test/skills/magic-word/SKILL.md +33 -0
- package/plugins/migration-scoring/.plugin/plugin.json +19 -0
- package/plugins/migration-scoring/README.md +244 -0
- package/plugins/migration-scoring/skills/migration-mapping/SKILL.md +72 -0
- package/plugins/migration-scoring/skills/migration-report/SKILL.md +118 -0
- package/plugins/migration-scoring/skills/migration-scoring-overview/SKILL.md +126 -0
- package/plugins/migration-scoring/skills/score-quality/SKILL.md +54 -0
- package/plugins/migration-scoring/skills/score-quality/references/scoring-criteria.md +30 -0
- package/plugins/migration-scoring/skills/score-style/SKILL.md +106 -0
- package/plugins/onboarding/.plugin/plugin.json +20 -0
- package/plugins/onboarding/README.md +30 -0
- package/plugins/onboarding/references/criteria.md +144 -0
- package/plugins/onboarding/skills/agent-readiness-report/README.md +23 -0
- package/plugins/onboarding/skills/agent-readiness-report/SKILL.md +122 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_agent_instructions.sh +88 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_build_env.sh +114 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_feedback_loops.sh +133 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_policy.sh +113 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_workflows.sh +127 -0
- package/plugins/onboarding/skills/improve-agent-readiness/README.md +19 -0
- package/plugins/onboarding/skills/improve-agent-readiness/SKILL.md +167 -0
- package/plugins/onboarding/skills/setup-agents-md/README.md +15 -0
- package/plugins/onboarding/skills/setup-agents-md/SKILL.md +150 -0
- package/plugins/onboarding/skills/setup-openhands/README.md +20 -0
- package/plugins/onboarding/skills/setup-openhands/SKILL.md +56 -0
- package/plugins/onboarding/skills/setup-pr-review/README.md +23 -0
- package/plugins/onboarding/skills/setup-pr-review/SKILL.md +72 -0
- package/plugins/openhands/.plugin/plugin.json +13 -0
- package/plugins/openhands/README.md +52 -0
- package/plugins/openhands/SKILL.md +61 -0
- package/plugins/openhands/commands/create.md +55 -0
- package/plugins/openhands/commands/openhands-cloud.md +8 -0
- package/plugins/openhands/scripts/run.sh +69 -0
- package/plugins/pr-review/.plugin/plugin.json +13 -0
- package/plugins/pr-review/README.md +393 -0
- package/plugins/pr-review/action.yml +298 -0
- package/plugins/pr-review/scripts/agent_script.py +1282 -0
- package/plugins/pr-review/scripts/evaluate_review.py +655 -0
- package/plugins/pr-review/scripts/prompt.py +260 -0
- package/plugins/pr-review/workflows/pr-review-by-openhands.yml +51 -0
- package/plugins/pr-review/workflows/pr-review-evaluation.yml +85 -0
- package/plugins/qa-changes/.plugin/plugin.json +11 -0
- package/plugins/qa-changes/README.md +185 -0
- package/plugins/qa-changes/action.yml +181 -0
- package/plugins/qa-changes/scripts/agent_script.py +406 -0
- package/plugins/qa-changes/scripts/evaluate_qa_changes.py +385 -0
- package/plugins/qa-changes/scripts/prompt.py +174 -0
- package/plugins/qa-changes/workflows/qa-changes-by-openhands.yml +50 -0
- package/plugins/qa-changes/workflows/qa-changes-evaluation.yml +85 -0
- package/plugins/release-notes/.plugin/plugin.json +19 -0
- package/plugins/release-notes/README.md +283 -0
- package/plugins/release-notes/SKILL.md +83 -0
- package/plugins/release-notes/action.yml +117 -0
- package/plugins/release-notes/commands/release-notes.md +8 -0
- package/plugins/release-notes/scripts/agent_script.py +292 -0
- package/plugins/release-notes/scripts/generate_release_notes.py +733 -0
- package/plugins/release-notes/scripts/prompt.py +90 -0
- package/plugins/release-notes/scripts/validate_release_notes.py +328 -0
- package/plugins/release-notes/workflows/release-notes.yml +76 -0
- package/plugins/vulnerability-remediation/.plugin/plugin.json +19 -0
- package/plugins/vulnerability-remediation/README.md +217 -0
- package/plugins/vulnerability-remediation/action.yml +187 -0
- package/plugins/vulnerability-remediation/scripts/scan_and_remediate.py +561 -0
- package/plugins/vulnerability-remediation/workflows/vulnerability-scan.yml +87 -0
- package/pyproject.toml +12 -0
- package/release-please-config.json +16 -0
- package/scripts/sync_extensions.py +494 -0
- package/scripts/sync_openhands_sdk_skill.py +264 -0
- package/skills/README.md +159 -0
- package/skills/add-javadoc/.plugin/plugin.json +18 -0
- package/skills/add-javadoc/README.md +40 -0
- package/skills/add-javadoc/SKILL.md +35 -0
- package/skills/add-javadoc/references/example.md +32 -0
- package/skills/add-skill/.plugin/plugin.json +18 -0
- package/skills/add-skill/README.md +67 -0
- package/skills/add-skill/SKILL.md +47 -0
- package/skills/add-skill/scripts/fetch_skill.py +259 -0
- package/skills/agent-creator/.plugin/plugin.json +20 -0
- package/skills/agent-creator/README.md +104 -0
- package/skills/agent-creator/SKILL.md +190 -0
- package/skills/agent-creator/commands/agent-creator.md +8 -0
- package/skills/agent-creator/references/fallback.md +117 -0
- package/skills/agent-memory/.plugin/plugin.json +18 -0
- package/skills/agent-memory/README.md +35 -0
- package/skills/agent-memory/SKILL.md +30 -0
- package/skills/agent-memory/commands/remember.md +8 -0
- package/skills/agent-sdk-builder/.plugin/plugin.json +18 -0
- package/skills/agent-sdk-builder/README.md +40 -0
- package/skills/agent-sdk-builder/SKILL.md +37 -0
- package/skills/agent-sdk-builder/commands/agent-builder.md +8 -0
- package/skills/azure-devops/.plugin/plugin.json +18 -0
- package/skills/azure-devops/README.md +55 -0
- package/skills/azure-devops/SKILL.md +50 -0
- package/skills/bitbucket/.plugin/plugin.json +17 -0
- package/skills/bitbucket/README.md +50 -0
- package/skills/bitbucket/SKILL.md +45 -0
- package/skills/code-review/.plugin/plugin.json +19 -0
- package/skills/code-review/README.md +18 -0
- package/skills/code-review/SKILL.md +208 -0
- package/skills/code-review/commands/codereview-roasted.md +8 -0
- package/skills/code-review/commands/codereview.md +8 -0
- package/skills/code-review/references/risk-evaluation.md +41 -0
- package/skills/code-review/references/supply-chain-security.md +31 -0
- package/skills/code-simplifier/.plugin/plugin.json +21 -0
- package/skills/code-simplifier/README.md +30 -0
- package/skills/code-simplifier/SKILL.md +91 -0
- package/skills/code-simplifier/commands/simplify.md +8 -0
- package/skills/code-simplifier/references/code-quality-review.md +86 -0
- package/skills/code-simplifier/references/code-reuse-review.md +63 -0
- package/skills/code-simplifier/references/efficiency-review.md +81 -0
- package/skills/datadog/.plugin/plugin.json +19 -0
- package/skills/datadog/README.md +100 -0
- package/skills/datadog/SKILL.md +95 -0
- package/skills/deno/.plugin/plugin.json +18 -0
- package/skills/deno/README.md +5 -0
- package/skills/deno/SKILL.md +99 -0
- package/skills/deno/references/README.md +6 -0
- package/skills/discord/.plugin/plugin.json +18 -0
- package/skills/discord/README.md +31 -0
- package/skills/discord/SKILL.md +109 -0
- package/skills/discord/__init__.py +0 -0
- package/skills/discord/references/REFERENCE.md +78 -0
- package/skills/discord/scripts/__init__.py +0 -0
- package/skills/discord/scripts/_http.py +127 -0
- package/skills/discord/scripts/post_webhook.py +106 -0
- package/skills/discord/scripts/send_message.py +102 -0
- package/skills/docker/.plugin/plugin.json +17 -0
- package/skills/docker/README.md +34 -0
- package/skills/docker/SKILL.md +29 -0
- package/skills/evidence-based-citations/.plugin/plugin.json +20 -0
- package/skills/evidence-based-citations/README.md +31 -0
- package/skills/evidence-based-citations/SKILL.md +59 -0
- package/skills/flarglebargle/.plugin/plugin.json +16 -0
- package/skills/flarglebargle/README.md +14 -0
- package/skills/flarglebargle/SKILL.md +9 -0
- package/skills/frontend-design/.plugin/plugin.json +21 -0
- package/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/frontend-design/README.md +42 -0
- package/skills/frontend-design/SKILL.md +42 -0
- package/skills/github/.plugin/plugin.json +19 -0
- package/skills/github/README.md +42 -0
- package/skills/github/SKILL.md +106 -0
- package/skills/github-pr-review/.plugin/plugin.json +18 -0
- package/skills/github-pr-review/README.md +145 -0
- package/skills/github-pr-review/SKILL.md +148 -0
- package/skills/github-pr-review/commands/github-pr-review.md +8 -0
- package/skills/github-pr-reviewer/.plugin/plugin.json +20 -0
- package/skills/github-pr-reviewer/README.md +34 -0
- package/skills/github-pr-reviewer/SKILL.md +89 -0
- package/skills/github-pr-reviewer/commands/pr-reviewer:setup.md +8 -0
- package/skills/github-repo-monitor/.plugin/plugin.json +22 -0
- package/skills/github-repo-monitor/README.md +70 -0
- package/skills/github-repo-monitor/SKILL.md +316 -0
- package/skills/github-repo-monitor/commands/github-monitor:poll.md +8 -0
- package/skills/github-repo-monitor/references/github-api.md +241 -0
- package/skills/github-repo-monitor/references/state-schema.md +160 -0
- package/skills/github-repo-monitor/scripts/main.py +915 -0
- package/skills/github-repo-monitor/tests/test_main.py +400 -0
- package/skills/gitlab/.plugin/plugin.json +17 -0
- package/skills/gitlab/README.md +37 -0
- package/skills/gitlab/SKILL.md +32 -0
- package/skills/incident-retrospective/.plugin/plugin.json +21 -0
- package/skills/incident-retrospective/README.md +34 -0
- package/skills/incident-retrospective/SKILL.md +98 -0
- package/skills/incident-retrospective/commands/incident-retro:setup.md +8 -0
- package/skills/iterate/.plugin/plugin.json +13 -0
- package/skills/iterate/README.md +25 -0
- package/skills/iterate/SKILL.md +399 -0
- package/skills/iterate/commands/babysit.md +8 -0
- package/skills/iterate/commands/iterate.md +8 -0
- package/skills/iterate/commands/verify.md +8 -0
- package/skills/iterate/references/heuristics.md +58 -0
- package/skills/iterate/references/verification.md +96 -0
- package/skills/jupyter/.plugin/plugin.json +18 -0
- package/skills/jupyter/README.md +55 -0
- package/skills/jupyter/SKILL.md +50 -0
- package/skills/kubernetes/.plugin/plugin.json +18 -0
- package/skills/kubernetes/README.md +53 -0
- package/skills/kubernetes/SKILL.md +48 -0
- package/skills/learn-from-code-review/.plugin/plugin.json +19 -0
- package/skills/learn-from-code-review/README.md +64 -0
- package/skills/learn-from-code-review/SKILL.md +186 -0
- package/skills/learn-from-code-review/commands/learn-from-reviews.md +8 -0
- package/skills/linear/.plugin/plugin.json +19 -0
- package/skills/linear/README.md +58 -0
- package/skills/linear/SKILL.md +213 -0
- package/skills/linear-triage/.plugin/plugin.json +21 -0
- package/skills/linear-triage/README.md +34 -0
- package/skills/linear-triage/SKILL.md +91 -0
- package/skills/linear-triage/commands/linear-triage:setup.md +8 -0
- package/skills/notion/.plugin/plugin.json +17 -0
- package/skills/notion/README.md +114 -0
- package/skills/notion/SKILL.md +109 -0
- package/skills/npm/.plugin/plugin.json +17 -0
- package/skills/npm/README.md +14 -0
- package/skills/npm/SKILL.md +9 -0
- package/skills/openhands-api/.plugin/plugin.json +22 -0
- package/skills/openhands-api/README.md +48 -0
- package/skills/openhands-api/SKILL.md +399 -0
- package/skills/openhands-api/references/README.md +33 -0
- package/skills/openhands-api/references/TROUBLESHOOTING.md +81 -0
- package/skills/openhands-api/references/example_prompt.md +12 -0
- package/skills/openhands-api/scripts/openhands_api.py +606 -0
- package/skills/openhands-api/scripts/openhands_api.ts +252 -0
- package/skills/openhands-automation/.plugin/plugin.json +19 -0
- package/skills/openhands-automation/README.md +89 -0
- package/skills/openhands-automation/SKILL.md +875 -0
- package/skills/openhands-automation/commands/automation:create.md +8 -0
- package/skills/openhands-automation/references/ab-testing.md +185 -0
- package/skills/openhands-automation/references/custom-automation.md +644 -0
- package/skills/openhands-sdk/.plugin/plugin.json +20 -0
- package/skills/openhands-sdk/README.md +22 -0
- package/skills/openhands-sdk/SKILL.md +229 -0
- package/skills/openhands-sdk/commands/sdk.md +8 -0
- package/skills/pdflatex/.plugin/plugin.json +18 -0
- package/skills/pdflatex/README.md +39 -0
- package/skills/pdflatex/SKILL.md +34 -0
- package/skills/prd/.plugin/plugin.json +19 -0
- package/skills/prd/README.md +28 -0
- package/skills/prd/SKILL.md +237 -0
- package/skills/prd/commands/prd.md +8 -0
- package/skills/qa-changes/README.md +18 -0
- package/skills/qa-changes/SKILL.md +229 -0
- package/skills/qa-changes/commands/qa-changes.md +8 -0
- package/skills/release-notes/README.md +24 -0
- package/skills/release-notes/SKILL.md +19 -0
- package/skills/release-notes/commands/release-notes.md +8 -0
- package/skills/research-brief/.plugin/plugin.json +20 -0
- package/skills/research-brief/README.md +34 -0
- package/skills/research-brief/SKILL.md +99 -0
- package/skills/research-brief/commands/research-brief:setup.md +8 -0
- package/skills/security/.plugin/plugin.json +18 -0
- package/skills/security/README.md +38 -0
- package/skills/security/SKILL.md +33 -0
- package/skills/skill-creator/.plugin/plugin.json +17 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/README.md +182 -0
- package/skills/skill-creator/SKILL.md +545 -0
- package/skills/skill-creator/references/output-patterns.md +82 -0
- package/skills/skill-creator/references/workflows.md +28 -0
- package/skills/skill-creator/scripts/init_skill.py +303 -0
- package/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/skills/slack-channel-monitor/.plugin/plugin.json +21 -0
- package/skills/slack-channel-monitor/README.md +91 -0
- package/skills/slack-channel-monitor/SKILL.md +276 -0
- package/skills/slack-channel-monitor/commands/slack-monitor:poll.md +8 -0
- package/skills/slack-channel-monitor/references/slack-api.md +207 -0
- package/skills/slack-channel-monitor/references/state-schema.md +180 -0
- package/skills/slack-channel-monitor/scripts/main.py +962 -0
- package/skills/slack-standup-digest/.plugin/plugin.json +21 -0
- package/skills/slack-standup-digest/README.md +34 -0
- package/skills/slack-standup-digest/SKILL.md +92 -0
- package/skills/slack-standup-digest/commands/standup-digest:setup.md +8 -0
- package/skills/spark-version-upgrade/.plugin/plugin.json +20 -0
- package/skills/spark-version-upgrade/README.md +54 -0
- package/skills/spark-version-upgrade/SKILL.md +233 -0
- package/skills/ssh/.plugin/plugin.json +18 -0
- package/skills/ssh/README.md +140 -0
- package/skills/ssh/SKILL.md +135 -0
- package/skills/swift-linux/.plugin/plugin.json +17 -0
- package/skills/swift-linux/README.md +86 -0
- package/skills/swift-linux/SKILL.md +81 -0
- package/skills/theme-factory/.plugin/plugin.json +19 -0
- package/skills/theme-factory/LICENSE.txt +202 -0
- package/skills/theme-factory/README.md +58 -0
- package/skills/theme-factory/SKILL.md +59 -0
- package/skills/theme-factory/theme-showcase.pdf +0 -0
- package/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/theme-factory/themes/desert-rose.md +19 -0
- package/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/theme-factory/themes/golden-hour.md +19 -0
- package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/uv/.plugin/plugin.json +18 -0
- package/skills/uv/README.md +5 -0
- package/skills/uv/SKILL.md +95 -0
- package/skills/uv/references/README.md +5 -0
- package/skills/vercel/.plugin/plugin.json +18 -0
- package/skills/vercel/README.md +108 -0
- package/skills/vercel/SKILL.md +103 -0
- package/tests/test_add_skill_installs_to_agents_dir.py +42 -0
- package/tests/test_catalogs.py +109 -0
- package/tests/test_code_review_risk_evaluation.py +94 -0
- package/tests/test_issue_duplicate_checker.py +240 -0
- package/tests/test_openhands_api_python.py +152 -0
- package/tests/test_plugin_manifest.py +83 -0
- package/tests/test_pr_review_diff_payload.py +202 -0
- package/tests/test_pr_review_feedback.py +263 -0
- package/tests/test_pr_review_prompt.py +152 -0
- package/tests/test_pr_review_review_context.py +253 -0
- package/tests/test_qa_changes.py +232 -0
- package/tests/test_qa_changes_evaluation.py +259 -0
- package/tests/test_release_notes_generator.py +990 -0
- package/tests/test_sdk_loading.py +150 -0
- package/tests/test_skill_plugin_loading.py +149 -0
- package/tests/test_skills_have_readme.py +66 -0
- package/tests/test_sync_extensions.py +292 -0
- package/tests/test_workflow_sync.py +46 -0
- package/utils/analysis/README.md +7 -0
- package/utils/analysis/laminar_signals/README.md +211 -0
- package/utils/analysis/laminar_signals/analyze.py +780 -0
- package/utils/analysis/laminar_signals/templates/default.j2 +49 -0
- package/utils/analysis/laminar_signals/templates/pr_review.j2 +61 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# qa-changes
|
|
2
|
+
|
|
3
|
+
Skill that provides a structured QA methodology for validating pull request changes. The agent actually runs the software — setting up the environment and exercising changed behavior as a real user would — rather than running the test suite (CI's job) or analyzing code (code review's job).
|
|
4
|
+
|
|
5
|
+
See the [qa-changes plugin](../../plugins/qa-changes/) for the GitHub Actions integration that automates this on every PR.
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
|
|
9
|
+
Trigger the skill with `/qa-changes` in a conversation, or use it via the `qa-changes` plugin in a GitHub Actions workflow.
|
|
10
|
+
|
|
11
|
+
## Methodology
|
|
12
|
+
|
|
13
|
+
The skill guides the agent through four phases:
|
|
14
|
+
|
|
15
|
+
1. **Understand** — Classify changes and identify entry points
|
|
16
|
+
2. **Setup** — Install dependencies, build, check CI status
|
|
17
|
+
3. **Exercise** — Run the actual code as a user would (browser, CLI, API requests)
|
|
18
|
+
4. **Report** — Post a structured QA report with evidence and a verdict
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa-changes
|
|
3
|
+
description: This skill should be used when the user asks to "QA a pull request", "test PR changes", "verify a PR works", "functionally test changes", or when an automated workflow triggers QA validation of code changes. Provides a structured methodology for setting up the environment, exercising changed behavior, and reporting results.
|
|
4
|
+
triggers:
|
|
5
|
+
- /qa-changes
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# QA Changes
|
|
9
|
+
|
|
10
|
+
Validate pull request changes by actually running the code — not just reading it. The goal is to verify that new behavior works as the PR claims, existing behavior is not broken, and the repository remains healthy after the change.
|
|
11
|
+
|
|
12
|
+
The bar is high: test the way a thorough human QA engineer would. If the PR changes a web UI, spin up the server and verify it in a real browser. If it changes a CLI, run the CLI with real inputs. Do not settle for "the tests pass" — actually use the software.
|
|
13
|
+
|
|
14
|
+
## Core Methodology
|
|
15
|
+
|
|
16
|
+
QA proceeds in four phases. Complete each phase in order. If a phase fails, report the failure and stop.
|
|
17
|
+
|
|
18
|
+
### Phase 1: Understand the Change
|
|
19
|
+
|
|
20
|
+
Read the PR diff, title, and description. **Identify the goal of this PR** — this is the single most important thing to understand before proceeding. A PR might fix a bug, add a feature, refactor code, improve performance, update documentation, or something else entirely. Check:
|
|
21
|
+
|
|
22
|
+
1. **The PR description "Why" / "Summary" section** — what is the author trying to accomplish?
|
|
23
|
+
2. **Linked issues** — if the PR references an issue, read it. But note: the PR may address the issue differently than expected, or only partially. The PR description is the real specification for what *this PR* intends to deliver.
|
|
24
|
+
3. **The PR title** — often summarizes the intent (e.g., "fix: X not working when Y", "feat: add Z capability", "refactor: consolidate duplicated X logic").
|
|
25
|
+
|
|
26
|
+
Then classify every changed file:
|
|
27
|
+
|
|
28
|
+
- **New feature**: User-visible behavior that did not exist before.
|
|
29
|
+
- **Bug fix**: Corrects existing behavior to match intended behavior.
|
|
30
|
+
- **Refactor**: Restructuring that should not change external behavior.
|
|
31
|
+
- **Configuration / CI / docs**: Non-functional changes.
|
|
32
|
+
|
|
33
|
+
For each change, identify the *entry point* — the concrete way a user would interact with it (CLI command, API endpoint, UI page, function call). This drives what to exercise in Phase 3.
|
|
34
|
+
|
|
35
|
+
Finally, form a clear hypothesis: "This PR should [achieve stated goal] by [approach taken in the diff]." Phase 3 will test that hypothesis.
|
|
36
|
+
|
|
37
|
+
### Phase 2: Set Up the Environment
|
|
38
|
+
|
|
39
|
+
Bootstrap the repository so the project builds and runs successfully.
|
|
40
|
+
|
|
41
|
+
1. **Read the repo's bootstrap instructions.** Check `AGENTS.md`, `README.md`, `Makefile`, `package.json`, `pyproject.toml`, `Cargo.toml`, or equivalent. Always prefer the project's own documented setup commands.
|
|
42
|
+
2. **Install dependencies.** Use the project's dependency manager (`uv sync`, `npm install`, `pip install -r requirements.txt`, `bundle install`, `cargo build`, etc.).
|
|
43
|
+
3. **Build the project** if a build step is required (compile, transpile, bundle).
|
|
44
|
+
4. **Note CI status.** Glance at the PR's CI checks and note whether they pass or fail. Do NOT re-run the test suite yourself — that is CI's job, not yours. Your job starts in Phase 3.
|
|
45
|
+
|
|
46
|
+
If setup fails, report the failure with the exact error output and stop.
|
|
47
|
+
|
|
48
|
+
### Phase 3: Exercise the Changed Behavior
|
|
49
|
+
|
|
50
|
+
This is the most important phase. **Actually use the software** the way a real user would to verify the change works as the PR claims. This is what distinguishes QA from CI (which runs tests) and code review (which reads code).
|
|
51
|
+
|
|
52
|
+
**Do NOT:**
|
|
53
|
+
- Run the test suite (`pytest`, `npm test`, `cargo test`, etc.) — that is CI's job.
|
|
54
|
+
- Analyze code by reading files and commenting on style, structure, or logic — that is code review's job.
|
|
55
|
+
- Run linters, formatters, type checkers, or pre-commit hooks — that is CI's job.
|
|
56
|
+
|
|
57
|
+
**DO:**
|
|
58
|
+
- Run the actual application, CLI, or server and interact with it as a user would.
|
|
59
|
+
- Make real HTTP requests, run real commands, open real browser pages.
|
|
60
|
+
- Always attempt real execution first. Running `--help`, `--dry-run`, or `--version` is NOT functional verification — it only proves argument parsing works. If real execution fails due to missing credentials, external services, or environment constraints, report what you tried and what could not be verified. Do not substitute `--help` output for evidence the software works.
|
|
61
|
+
- Reproduce bugs and verify fixes end-to-end.
|
|
62
|
+
- Test user-facing behavior that automated tests cannot or do not cover.
|
|
63
|
+
|
|
64
|
+
**Start by verifying the PR achieves its stated goal.** Use the hypothesis from Phase 1. For example:
|
|
65
|
+
- If the PR claims to "fix crash when X is empty", reproduce the crash scenario and confirm it no longer occurs.
|
|
66
|
+
- If the PR claims to "add support for Y", actually use Y end-to-end and confirm it works.
|
|
67
|
+
- If the PR claims to "add a new dashboard page", navigate to the page and verify it renders and functions correctly.
|
|
68
|
+
- If the PR claims to "add a new CLI flag", run the CLI with that flag and verify the output.
|
|
69
|
+
|
|
70
|
+
"Tests pass" is not a QA finding. The question is: does the software actually do what the PR says it does?
|
|
71
|
+
|
|
72
|
+
**For frontend / UI changes:**
|
|
73
|
+
- Start the development server.
|
|
74
|
+
- Use a real browser (via Playwright, browser automation tools, or the built-in browser) to navigate to the affected pages.
|
|
75
|
+
- Verify the visual change renders correctly. Take screenshots as evidence.
|
|
76
|
+
- Test user interactions (clicks, form submissions, navigation).
|
|
77
|
+
- Try at least one edge case (empty state, long text, missing data).
|
|
78
|
+
|
|
79
|
+
**For CLI changes:**
|
|
80
|
+
- Run the CLI command with realistic arguments. Capture stdout and stderr.
|
|
81
|
+
- Verify the output matches the PR's claimed behavior.
|
|
82
|
+
- Try at least one edge case (invalid input, missing flags, empty input).
|
|
83
|
+
|
|
84
|
+
**For API / backend changes:**
|
|
85
|
+
- Start the server.
|
|
86
|
+
- Make actual HTTP requests (`curl`, `httpie`, or a test client) to affected endpoints.
|
|
87
|
+
- Verify response status codes, response bodies, and side effects (database writes, file creation).
|
|
88
|
+
- Test error cases (bad input, missing auth, not found).
|
|
89
|
+
|
|
90
|
+
**For bug fixes — use a before/after comparison:**
|
|
91
|
+
1. **Reproduce the bug without the fix.** Check out the base branch (or revert the PR's changes) and run a concrete command or code path that triggers the reported failure. Show the exact command and its output.
|
|
92
|
+
2. **Interpret the baseline result.** Explain what the output means — e.g., "This confirms the bug exists: the resolver cannot find the package because the lockfile's cutoff date is too old."
|
|
93
|
+
3. **Apply the PR's changes.** Check out the PR branch, apply the patch, or set the environment variable — whatever the fix entails.
|
|
94
|
+
4. **Re-run the same verification.** Run the same command or exercise the same code path with the fix in place. Show the exact command and its output.
|
|
95
|
+
5. **Interpret the result.** Explain what the new output means — e.g., "The resolver now finds the package, confirming the fix works."
|
|
96
|
+
6. **Check for side effects.** Confirm the fix does not break related functionality.
|
|
97
|
+
|
|
98
|
+
**For library / SDK changes:**
|
|
99
|
+
- Write a short script that imports and calls the changed functions.
|
|
100
|
+
- Verify the return values and behavior match the PR's claims.
|
|
101
|
+
- Test edge cases the PR author may have missed.
|
|
102
|
+
|
|
103
|
+
**For refactors:**
|
|
104
|
+
- If the refactor touches a critical or user-facing path, manually exercise that path to confirm behavior is unchanged.
|
|
105
|
+
- For pure internal refactors where CI passes and no user-facing path is affected, Phase 2's CI check is sufficient.
|
|
106
|
+
|
|
107
|
+
**For configuration / CI / docs:**
|
|
108
|
+
- Validate syntax (YAML lint, JSON parse, markdown render).
|
|
109
|
+
- If it is a build change, confirm the build still succeeds.
|
|
110
|
+
- For doc changes, confirm the documentation renders correctly if a preview is available.
|
|
111
|
+
|
|
112
|
+
**Always show your work with a before/after narrative.** For every verification, the report must include: (a) the exact command you ran, (b) the actual output you observed, and (c) your interpretation of that output. For bug fixes and behavioral changes, demonstrate BOTH the broken/old state AND the fixed/new state so the reviewer can see the delta. Present this evidence inside collapsible `<details>` blocks — the core deliverable is the verdict and summary, not raw logs.
|
|
113
|
+
|
|
114
|
+
### Knowing When to Give Up
|
|
115
|
+
|
|
116
|
+
Some verification approaches will fail due to environment constraints, missing system dependencies, or tooling limitations. That is expected.
|
|
117
|
+
|
|
118
|
+
**The rule: if the same general approach fails after three materially different attempts, stop trying that approach.** For example, if three different Playwright configurations all fail to connect to the dev server, do not try a fourth Playwright variation. Switch to a fundamentally different approach (e.g., `curl` + manual HTML inspection instead of browser automation). If two fundamentally different approaches both fail, give up on that specific verification and say so in the report.
|
|
119
|
+
|
|
120
|
+
When giving up on a verification:
|
|
121
|
+
- State clearly what was attempted and why it failed.
|
|
122
|
+
- State what *could not* be verified as a result.
|
|
123
|
+
- Suggest the human add guidance to `AGENTS.md` (or a custom `/qa-changes` skill) that would help future QA runs succeed — for example: which port the dev server runs on, what system packages are required, how to configure browser automation, or what the expected test output looks like.
|
|
124
|
+
|
|
125
|
+
Do not silently skip verification. An honest "I could not verify X because Y" is far more valuable than a false "everything works."
|
|
126
|
+
|
|
127
|
+
### Phase 4: Report Results
|
|
128
|
+
|
|
129
|
+
Post a structured report as a PR review using the GitHub API. **Keep the report scannable.** A reviewer should grasp the verdict and key results in under 10 seconds. Put lengthy evidence (logs, code snippets, full command output) inside collapsible `<details>` blocks so the top-level report stays compact.
|
|
130
|
+
|
|
131
|
+
#### Report format
|
|
132
|
+
|
|
133
|
+
```markdown
|
|
134
|
+
## {verdict_emoji} QA Report: {VERDICT}
|
|
135
|
+
|
|
136
|
+
{One-sentence summary of what was verified and the outcome.}
|
|
137
|
+
|
|
138
|
+
### Does this PR achieve its stated goal?
|
|
139
|
+
|
|
140
|
+
{Direct answer: Yes / Partially / No.}
|
|
141
|
+
{2-3 sentences explaining WHY, referencing specific evidence from
|
|
142
|
+
exercising the software. For bug fixes: is the bug actually fixed?
|
|
143
|
+
For features: does the new capability work end-to-end? For refactors:
|
|
144
|
+
is the restructuring achieved without changing behavior? Be specific
|
|
145
|
+
about what the goal was and whether the changes deliver on it.}
|
|
146
|
+
|
|
147
|
+
| Phase | Result |
|
|
148
|
+
|-------|--------|
|
|
149
|
+
| Environment Setup | {emoji} {one-line status} |
|
|
150
|
+
| CI Status | {emoji} {one-line note from CI checks, e.g. "all green" or "2 checks failing"} |
|
|
151
|
+
| Functional Verification | {emoji} {one-line status} |
|
|
152
|
+
|
|
153
|
+
<details><summary>Functional Verification</summary>
|
|
154
|
+
|
|
155
|
+
{Structure each verification as a before/after narrative:
|
|
156
|
+
|
|
157
|
+
### Test N: {Description}
|
|
158
|
+
|
|
159
|
+
**Step 1 — Reproduce / establish baseline (without the fix):**
|
|
160
|
+
Ran `{exact command}`:
|
|
161
|
+
```
|
|
162
|
+
{actual output}
|
|
163
|
+
```
|
|
164
|
+
This shows {interpretation — what the output means, e.g. "the bug
|
|
165
|
+
exists because..."}.
|
|
166
|
+
|
|
167
|
+
**Step 2 — Apply the PR's changes:**
|
|
168
|
+
{What was done — e.g. checked out the PR branch, set env var, etc.}
|
|
169
|
+
|
|
170
|
+
**Step 3 — Re-run with the fix in place:**
|
|
171
|
+
Ran `{same or equivalent command}`:
|
|
172
|
+
```
|
|
173
|
+
{actual output}
|
|
174
|
+
```
|
|
175
|
+
This shows {interpretation — e.g. "the fix works because the error
|
|
176
|
+
is gone and the expected result appears"}.
|
|
177
|
+
|
|
178
|
+
Repeat for each changed behavior. For non-bug-fix changes
|
|
179
|
+
(features, refactors), the baseline step may simply describe the
|
|
180
|
+
prior state rather than reproducing a failure.}
|
|
181
|
+
|
|
182
|
+
</details>
|
|
183
|
+
|
|
184
|
+
<details><summary>Unable to Verify</summary>
|
|
185
|
+
|
|
186
|
+
{What could not be verified, what was attempted, and suggested
|
|
187
|
+
AGENTS.md guidance. Omit this section entirely if everything
|
|
188
|
+
was verified.}
|
|
189
|
+
|
|
190
|
+
</details>
|
|
191
|
+
|
|
192
|
+
### Issues Found
|
|
193
|
+
|
|
194
|
+
{List concrete problems, or "None." if clean.}
|
|
195
|
+
|
|
196
|
+
- 🔴 **Blocker**: ...
|
|
197
|
+
- 🟠 **Issue**: ...
|
|
198
|
+
- 🟡 **Minor**: ...
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
#### Formatting rules
|
|
202
|
+
|
|
203
|
+
- **Verdict line + summary** come first. One emoji, one sentence. No preamble.
|
|
204
|
+
- **Status table** gives the at-a-glance overview. One row per phase, one-line status.
|
|
205
|
+
- **Evidence goes in `<details>` blocks.** Any code block, log excerpt, or command output longer than ~4 lines belongs inside a collapsible. Reviewers who want proof can expand; others can skip.
|
|
206
|
+
- **Do not repeat information.** The summary, table, and details should each add new information — not restate the same facts in different formats.
|
|
207
|
+
- **Issues Found** is always visible (not collapsible). If there are no issues, write "None."
|
|
208
|
+
- **Omit empty sections.** If there is nothing unable to verify, drop that `<details>` block entirely.
|
|
209
|
+
|
|
210
|
+
#### Verdict values
|
|
211
|
+
|
|
212
|
+
- ✅ **PASS**: Change works as described, no regressions.
|
|
213
|
+
- ⚠️ **PASS WITH ISSUES**: Change mostly works, but issues were found (list them).
|
|
214
|
+
- ❌ **FAIL**: Change does not work as described, or introduces regressions.
|
|
215
|
+
- 🟡 **PARTIAL**: Some behavior verified, some could not be (list what was and was not verified).
|
|
216
|
+
|
|
217
|
+
## Key Principles
|
|
218
|
+
|
|
219
|
+
- **Answer the core question first: does this PR achieve its stated goal?** This is the primary deliverable. Explicitly state whether the changes deliver on what the PR description promises — whether that is a bug fix, a new feature, a refactor, or anything else.
|
|
220
|
+
- **Fail fast.** If setup fails, stop and report. Do not spend tokens on later phases with a broken environment.
|
|
221
|
+
- **Run the code, not the tests.** Execute the actual software — start servers, run CLI commands, make HTTP requests, open browsers. Do not run `pytest`, `npm test`, or equivalent test suites. That is CI's job.
|
|
222
|
+
- **Do not analyze code.** Reading files and commenting on style, structure, or logic is code review's job. Your job is to exercise behavior, not read source files.
|
|
223
|
+
- **Set a high bar.** If the change affects a UI, open it in a real browser. If it affects a CLI, run the actual CLI with real inputs. If it affects an API, make real HTTP requests.
|
|
224
|
+
- **Test what the PR claims.** The PR description is the specification. Verify the claim, not hypothetical scenarios.
|
|
225
|
+
- **Leave CI to CI.** Do not re-run tests, linters, formatters, or type checkers. Note CI status, then focus entirely on functional verification that CI cannot do.
|
|
226
|
+
- **Report evidence, not opinions.** Include exact commands, outputs, and error messages — inside collapsible blocks.
|
|
227
|
+
- **Keep it scannable.** The report is for busy reviewers. Verdict and summary up top, evidence collapsed below. Do not repeat information across sections.
|
|
228
|
+
- **Give up gracefully.** If a verification approach does not work after three materially different attempts, switch approaches. If two different approaches fail, give up and report honestly. Suggest `AGENTS.md` improvements.
|
|
229
|
+
- **Respect the project's conventions.** Use the project's own tools and build commands for setup.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
# auto-generated by sync_extensions.py
|
|
3
|
+
description: This skill should be used when the user asks to "QA a pull request", "test PR changes", "verify a PR works", "functionally test changes", or when an automated workflow triggers QA validation of code changes. Provides a structured methodology for setting up the environment, exercising changed behavior, and reporting results.
|
|
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,24 @@
|
|
|
1
|
+
# Releasenotes
|
|
2
|
+
|
|
3
|
+
Generate formatted changelogs from git history since the last release tag. Use when preparing release notes that categorize changes into breaking changes, features, fixes, and other sections.
|
|
4
|
+
|
|
5
|
+
## Triggers
|
|
6
|
+
|
|
7
|
+
This skill is activated by the following keywords:
|
|
8
|
+
|
|
9
|
+
- `/releasenotes`
|
|
10
|
+
|
|
11
|
+
## Details
|
|
12
|
+
|
|
13
|
+
Generate a changelog for all changes from the most recent release until now.
|
|
14
|
+
|
|
15
|
+
## Steps
|
|
16
|
+
1. Find the most recent release tag using `git tag --sort=-creatordate`
|
|
17
|
+
2. Get commits and merged PRs since that tag
|
|
18
|
+
3. Look at previous releases in this repo to match their format and style
|
|
19
|
+
4. Categorize changes into sections: Breaking Changes, Added, Changed, Fixed, Notes
|
|
20
|
+
5. Focus on user-facing changes (features, important bug fixes, breaking changes)
|
|
21
|
+
6. Include PR links and contributor attribution
|
|
22
|
+
|
|
23
|
+
## Output
|
|
24
|
+
Present the changelog in a markdown code block, ready to copy-paste into a GitHub release.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: release-notes
|
|
3
|
+
description: Generate formatted changelogs from git history since the last release tag. Use when preparing release notes that categorize changes into breaking changes, features, fixes, and other sections.
|
|
4
|
+
triggers:
|
|
5
|
+
- /release-notes
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Generate a changelog for all changes from the most recent release until now.
|
|
9
|
+
|
|
10
|
+
## Steps
|
|
11
|
+
1. Find the most recent release tag using `git tag --sort=-creatordate`
|
|
12
|
+
2. Get commits and merged PRs since that tag
|
|
13
|
+
3. Look at previous releases in this repo to match their format and style
|
|
14
|
+
4. Categorize changes into sections: Breaking Changes, Added, Changed, Fixed, Notes
|
|
15
|
+
5. Focus on user-facing changes (features, important bug fixes, breaking changes)
|
|
16
|
+
6. Include PR links and contributor attribution
|
|
17
|
+
|
|
18
|
+
## Output
|
|
19
|
+
Present the changelog in a markdown code block, ready to copy-paste into a GitHub release.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
# auto-generated by sync_extensions.py
|
|
3
|
+
description: Generate formatted changelogs from git history since the last release tag. Use when preparing release notes that categorize changes into breaking changes, features, fixes, and other sections.
|
|
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": "research-brief",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Create a recurring automation that researches a topic using Tavily web search and publishes a structured brief to Notion with executive summary, key findings, implications, and source citations.",
|
|
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
|
+
"research",
|
|
14
|
+
"brief",
|
|
15
|
+
"tavily",
|
|
16
|
+
"notion",
|
|
17
|
+
"web-search",
|
|
18
|
+
"automation"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Research Brief Writer
|
|
2
|
+
|
|
3
|
+
Create a recurring automation that researches a topic and publishes a brief to Notion.
|
|
4
|
+
|
|
5
|
+
## Triggers
|
|
6
|
+
|
|
7
|
+
This skill is activated by keywords:
|
|
8
|
+
|
|
9
|
+
- `research brief`
|
|
10
|
+
- `topic monitoring`
|
|
11
|
+
- `competitive research automation`
|
|
12
|
+
|
|
13
|
+
## Features
|
|
14
|
+
|
|
15
|
+
- **Web research via Tavily MCP with configurable keywords**
|
|
16
|
+
- **Publishes structured briefs to Notion**
|
|
17
|
+
- **Customizable cadence**: daily, weekly, or bi-weekly
|
|
18
|
+
- **Configurable citation style and brief structure**
|
|
19
|
+
- **Tracks competitors and specific entities**
|
|
20
|
+
|
|
21
|
+
## Prerequisites
|
|
22
|
+
|
|
23
|
+
Tavily MCP and Notion MCP installed in Settings → MCP
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
Ask OpenHands:
|
|
28
|
+
|
|
29
|
+
> "Set up a weekly research brief on AI code review tools, publish
|
|
30
|
+
> to our Notion research database with inline citations"
|
|
31
|
+
|
|
32
|
+
## See Also
|
|
33
|
+
|
|
34
|
+
- [SKILL.md](SKILL.md) — Full setup workflow reference
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: research-brief
|
|
3
|
+
description: >
|
|
4
|
+
Create an automation that writes a recurring research brief. Uses Tavily
|
|
5
|
+
MCP for web research and Notion MCP to publish the final brief with
|
|
6
|
+
executive summary, implications, and source citations.
|
|
7
|
+
triggers:
|
|
8
|
+
- /research-brief:setup
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Research Brief Writer Automation
|
|
12
|
+
|
|
13
|
+
Set up a recurring automation that researches a topic and publishes a brief
|
|
14
|
+
to Notion.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Prerequisites
|
|
19
|
+
|
|
20
|
+
### Required integrations
|
|
21
|
+
|
|
22
|
+
Both MCP integrations must be installed in Settings → MCP:
|
|
23
|
+
|
|
24
|
+
- **Tavily MCP** — for web research and source gathering
|
|
25
|
+
- **Notion MCP** — to publish the research brief
|
|
26
|
+
|
|
27
|
+
### Information to collect
|
|
28
|
+
|
|
29
|
+
Ask the user for:
|
|
30
|
+
|
|
31
|
+
1. **Topic** — what should be researched (e.g. "AI code review tools", "competitor pricing changes")
|
|
32
|
+
2. **Keywords and competitors** — specific terms, companies, or products to track
|
|
33
|
+
3. **Source quality rules** — any preferences on source types (e.g. prefer academic papers, exclude social media)
|
|
34
|
+
4. **Cadence** — how often should the brief run? (daily, weekly, bi-weekly)
|
|
35
|
+
5. **Notion destination** — which Notion database or page should receive the brief
|
|
36
|
+
6. **Citation style** — inline links, footnotes, or a references section
|
|
37
|
+
7. **Brief structure** — default: Executive Summary, Key Findings, Implications, Recommended Actions, Sources
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Setup Workflow
|
|
42
|
+
|
|
43
|
+
### Step 1 — Verify MCP access
|
|
44
|
+
|
|
45
|
+
Test each integration:
|
|
46
|
+
```
|
|
47
|
+
Use the Tavily MCP to search for a sample topic.
|
|
48
|
+
Use the Notion MCP to search for the destination database.
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
If any fail, tell the user which integration needs to be installed first.
|
|
52
|
+
|
|
53
|
+
### Step 2 — Configure the schedule
|
|
54
|
+
|
|
55
|
+
Based on the user's cadence preference, build a cron schedule:
|
|
56
|
+
- Daily: `0 8 * * 1-5` (weekday mornings)
|
|
57
|
+
- Weekly: `0 9 * * 1` (Monday morning)
|
|
58
|
+
- Bi-weekly: `0 9 1,15 * *` (1st and 15th)
|
|
59
|
+
|
|
60
|
+
Ask for timezone preference.
|
|
61
|
+
|
|
62
|
+
### Step 3 — Build the research prompt
|
|
63
|
+
|
|
64
|
+
Construct a prompt that includes:
|
|
65
|
+
- Research topic and keywords
|
|
66
|
+
- Competitor/entity tracking list
|
|
67
|
+
- Source quality preferences
|
|
68
|
+
- Brief structure template
|
|
69
|
+
- Notion destination details
|
|
70
|
+
- Citation format
|
|
71
|
+
|
|
72
|
+
### Step 4 — Create the automation
|
|
73
|
+
|
|
74
|
+
Read the Automation backend URL and auth from `<RUNTIME_SERVICES>`:
|
|
75
|
+
- Use the **Automation backend** `url_from_agent` as `OPENHANDS_HOST`
|
|
76
|
+
- Auth: `X-Session-API-Key: $OPENHANDS_AUTOMATION_API_KEY`
|
|
77
|
+
|
|
78
|
+
Use the **prompt preset** endpoint:
|
|
79
|
+
```bash
|
|
80
|
+
curl -s -X POST "${OPENHANDS_HOST}/api/automation/v1/preset/prompt" \
|
|
81
|
+
-H "X-Session-API-Key: $OPENHANDS_AUTOMATION_API_KEY" \
|
|
82
|
+
-H "Content-Type: application/json" \
|
|
83
|
+
-d '{
|
|
84
|
+
"name": "Research Brief Writer",
|
|
85
|
+
"prompt": "<constructed research prompt>",
|
|
86
|
+
"trigger": {"type": "cron", "schedule": "<schedule>", "timezone": "<tz>"}
|
|
87
|
+
}'
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Step 5 — Confirm
|
|
91
|
+
|
|
92
|
+
Tell the user:
|
|
93
|
+
> ✅ **Research Brief Writer** is running!
|
|
94
|
+
>
|
|
95
|
+
> - Automation ID: `{id}`
|
|
96
|
+
> - Topic: `{topic}`
|
|
97
|
+
> - Schedule: `{cron description}`
|
|
98
|
+
> - Notion destination: `{destination}`
|
|
99
|
+
> - Citation style: `{style}`
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
# auto-generated by sync_extensions.py
|
|
3
|
+
description: Create an automation that writes a recurring research brief. Uses Tavily MCP for web research and Notion MCP to publish the final brief with executive summary, implications, and source citations.
|
|
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,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "security",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Security best practices for secure coding, authentication, authorization, and data protection. Use when developing features that handle sensitive data, user authentication, or require security review.",
|
|
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
|
+
"security",
|
|
14
|
+
"authentication",
|
|
15
|
+
"authorization",
|
|
16
|
+
"encryption"
|
|
17
|
+
]
|
|
18
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Security
|
|
2
|
+
|
|
3
|
+
Security best practices for secure coding, authentication, authorization, and data protection. Use when developing features that handle sensitive data, user authentication, or require security review.
|
|
4
|
+
|
|
5
|
+
## Triggers
|
|
6
|
+
|
|
7
|
+
This skill is activated by the following keywords:
|
|
8
|
+
|
|
9
|
+
- `security`
|
|
10
|
+
- `vulnerability`
|
|
11
|
+
- `authentication`
|
|
12
|
+
- `authorization`
|
|
13
|
+
- `permissions`
|
|
14
|
+
|
|
15
|
+
## Details
|
|
16
|
+
|
|
17
|
+
This document provides guidance on security best practices
|
|
18
|
+
|
|
19
|
+
You should always be considering security implications when developing.
|
|
20
|
+
You should always complete the task requested. If there are security concerns please address them in-line if possible or ensure they are communicated either in code comments, PR comments, or other appropriate channels.
|
|
21
|
+
|
|
22
|
+
## Core Security Principles
|
|
23
|
+
- Always use secure communication protocols (HTTPS, SSH, etc.)
|
|
24
|
+
- Never store sensitive data (passwords, tokens, keys) in code or version control unless given explicit permission.
|
|
25
|
+
- Apply the principle of least privilege
|
|
26
|
+
- Validate and sanitize all user inputs
|
|
27
|
+
|
|
28
|
+
## Common Security Checks
|
|
29
|
+
- Ensure proper authentication and authorization mechanisms
|
|
30
|
+
- Verify secure session management
|
|
31
|
+
- Confirm secure storage of sensitive data
|
|
32
|
+
- Validate secure configuration of services and APIs
|
|
33
|
+
|
|
34
|
+
## Error Handling
|
|
35
|
+
- Never expose sensitive information in error messages
|
|
36
|
+
- Log security events appropriately
|
|
37
|
+
- Implement proper exception handling
|
|
38
|
+
- Use secure error reporting mechanisms
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security
|
|
3
|
+
description: Security best practices for secure coding, authentication, authorization, and data protection. Use when developing features that handle sensitive data, user authentication, or require security review.
|
|
4
|
+
triggers:
|
|
5
|
+
- security
|
|
6
|
+
- vulnerability
|
|
7
|
+
- authentication
|
|
8
|
+
- authorization
|
|
9
|
+
- permissions
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
This document provides guidance on security best practices
|
|
13
|
+
|
|
14
|
+
You should always be considering security implications when developing.
|
|
15
|
+
You should always complete the task requested. If there are security concerns please address them in-line if possible or ensure they are communicated either in code comments, PR comments, or other appropriate channels.
|
|
16
|
+
|
|
17
|
+
## Core Security Principles
|
|
18
|
+
- Always use secure communication protocols (HTTPS, SSH, etc.)
|
|
19
|
+
- Never store sensitive data (passwords, tokens, keys) in code or version control unless given explicit permission.
|
|
20
|
+
- Apply the principle of least privilege
|
|
21
|
+
- Validate and sanitize all user inputs
|
|
22
|
+
|
|
23
|
+
## Common Security Checks
|
|
24
|
+
- Ensure proper authentication and authorization mechanisms
|
|
25
|
+
- Verify secure session management
|
|
26
|
+
- Confirm secure storage of sensitive data
|
|
27
|
+
- Validate secure configuration of services and APIs
|
|
28
|
+
|
|
29
|
+
## Error Handling
|
|
30
|
+
- Never expose sensitive information in error messages
|
|
31
|
+
- Log security events appropriately
|
|
32
|
+
- Implement proper exception handling
|
|
33
|
+
- Use secure error reporting mechanisms
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "skill-creator",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, wor...",
|
|
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
|
+
"skill",
|
|
14
|
+
"plugin",
|
|
15
|
+
"create"
|
|
16
|
+
]
|
|
17
|
+
}
|