build-setup
Set up build environment and test fixtures for COBOL-to-Java migrations. Creates compilation infrastructure for both languages…
Set up an OpenHands "software factory" on GitHub fast: ask only for the repositories and where tickets live (GitHub issues, Jira or Linear), create a working issue-to-PR and PR-review pipeline from the automation catalog with defaults, show what runs, then let the user stop or
$ npx -y skills add openhands/extensions --skill software-factory --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/software-factoryContext preview
The summary Claude sees to decide when to auto-load this skill.
Set up an OpenHands "software factory" on GitHub fast: ask only for the repositories and where tickets live (GitHub issues, Jira or Linear), create a working issue-to-PR and PR-review pipeline from the automation catalog with defaults, show what runs, then let the user stop or
name: software-factory description: > Set up an OpenHands "software factory" on GitHub fast: ask only for the repositories and where tickets live (GitHub issues, Jira or Linear), create a working issue-to-PR and PR-review pipeline from the automation catalog with defaults, show what runs, then let the user stop or extend it one step at a time (tune settings, AGENTS.md maintainer, auto-merge, stale-CI and QA add-ons). triggers: - /software-factory - software factory
Build a GitHub software factory from unmodified automation catalog bundles (`automations/catalog/<id>/manifest.json`); a Jira or Linear station is created by its own skill. This skill adds no automation logic.
Two phases: **Phase 1** gets a working factory after one question. **Phase 2** extends it in short rounds, only as far as the user wants. After Phase 1 and after every round, the **Checkpoint** shows what exists and lets the user stop.
Code lives on GitHub. Tickets can come from GitHub issues (default), Jira or Linear: only the issue to PR station changes (see "Ticket source"). GitLab and Bitbucket code hosts are not part of this flow.
| Station | Catalog id | Phase | Needs agent profile | |---|---|---|---| | Issue to PR | `github-issue-to-pr`, or the Jira or Linear station | 1 | yes (GitHub issues only) | | PR reviewer | `github-pr-reviewer` | 1 | yes | | Issue triage | `github-issue-triage`, or `linear-triage-assistant` | 1 | yes (GitHub issues only) | | AGENTS.md maintainer | `github-agents-md-maintainer` | add-on | no | | Auto-merge watchdog | `github-delivery-watchdog` | add-on | no | | Stale-CI PR closer | `github-stale-ci-pr-closer` | add-on | no | | QA changes | `qa-changes` | add-on | no |
`scripts/factory.py` in this skill's directory does every catalog and API step and prints one JSON document; it exits non-zero with `{"error": ...}` on failure. Its usage is below: do not read its source, and do not load the `openhands-automation` skill for Phase 1.
Set `OPENHANDS_HOST` to the **Ingress** URL in `<RUNTIME_SERVICES>` on a local Agent Canvas (it serves both `/api/automation` and `/api`; the automation backend URL does not), or to `<HOST>` on OpenHands Cloud. Run every command as:
GITHUB_PERSONAL_ACCESS_TOKEN="$GITHUB_PERSONAL_ACCESS_TOKEN" \ OPENHANDS_AUTOMATION_API_KEY="$OPENHANDS_AUTOMATION_API_KEY" \ OPENHANDS_API_KEY="$OPENHANDS_API_KEY" \ python3 <this skill's directory>/scripts/factory.py <command> ...
`$F` below stands for that whole line. Keep the secret names in it: the agent server passes a saved secret into a command only when the command names it. The script reads the token and never prints it.
| Command | Does | |---|---| | `$F preflight --repos a/b,c/d` | Which stations this deployment supports, the agent profile, the GitHub login, push access per repository. | | `$F create --repos a/b --ids ID,ID [--set FIELD=VALUE] [--set ID.FIELD=VALUE]` | Fills each station's form (answers, then derived values, then manifest defaults), uploads the bundle and creates it disabled. `FIELD=VALUE` applies to every listed station with that field. Stations that already exist are reported under `existing`, not recreated. | | `$F tune --repos a/b --ids ID,ID [--set FIELD=VALUE] [--set ID.FIELD=VALUE]` | Applies new settings to an existing station by updating it in place. Use this to change a value that is fixed at creation. | | `$F verify ID... [--no-wait ID...]` | Dispatches once, enables the ones whose run `COMPLETED` and disables the rest, reporting their `error_detail`. `--no-wait` enables without waiting. | | `$F status ID...` | The latest run of each. | | `$F prs --repos a/b [--branch-prefix P]` | Open pull requests whose branch starts with `P` (default `openhands/agents-md`, the AGENTS.md maintainer's). | | `$F reset-token` | Deletes the saved `GITHUB_PERSONAL_ACCESS_TOKEN` (local Agent Canvas), so `request_secret` opens its form again. |
`create` and `verify` return each automation's `url`, its page in Agent Canvas. Trust the script's output: do not open pages in the browser to check them, and do not use the task tracker for this flow.
Add `--profile NAME` to `preflight` or `create` to use a profile other than the active one.
the others are skipped.
`githubTokenSecret` is `GITHUB_PERSONAL_ACCESS_TOKEN`. The watchdog's `branchPrefix` must equal issue to PR's: when it was changed, pass `--set github-delivery-watchdog.branchPrefix=<same value>`.
that need one and point the user to the station's catalog card in Agent Canvas (Automations), which has a profile picker.
argument or file.
created; report them with the error and ask whether to retry or delete them (`DELETE ${OPENHANDS_HOST}/api/automation/v1/{id}`).
set up by an earlier run and was left unchanged. Say so rather than presenting it as new, and change it with `$F tune` if the user wants different settings.
1. Ask, in one message: "Which GitHub repositories (`owner/repo`)? Where do tickets live: GitHub issues (default), Jira or Linear?" Say that everything else uses defaults that can be changed afterwards. If the answer names only repositories, use GitHub issues; do not ask again. 2. Run `$F preflight --repos <repos>`. Drop repositories without `push`, and say which. 3. If `github_login` is null, act on `token_error`:
`name: "GITHUB_PERSONAL_ACCESS_TOKEN"` and a `re
This repository is the public extensions registry for OpenHands. It contains reusable, shareable skills, plugins, and Agent Canvas Apps that customize agent behavior and interfaces. Skills overview docs: SDK skill guide:
Set up build environment and test fixtures for COBOL-to-Java migrations. Creates compilation infrastructure for both languages…
End-to-end COBOL to Java migration workflow. Handles build setup, mainframe dependency removal, and code migration with test…
Create a transformation guide for replacing mainframe-specific COBOL constructs with standard COBOL equivalents. Use when…
Apply mainframe dependency transformations to COBOL code using a pre-generated transformation guide. Converts CICS/VSAM…
Migrate COBOL code to idiomatic Java, preserving business logic while following Java best practices. Use for COBOL modernization…
A test skill that responds to the magic word "alakazam" with a specific phrase