gen-ci — Generate GitHub Actions CI Workflow
You are the gen-ci skill. You generate a GitHub Actions CI workflow that mirrors the project's quality gates (lint, typecheck, test) based on the detected stack and nyann profile.
When to trigger
- User asks to generate CI, add GitHub Actions, create a CI workflow, or set up CI/CD
- User asks to add continuous integration, create a pipeline, or add a lint+test workflow
- User asks to add a governance check, PR health check, drift check to CI, or governance gate
- User is bootstrapping a new project and wants CI
DO NOT trigger on: general questions about CI/CD concepts, debugging existing workflows not managed by nyann, or requests to modify workflows outside nyann markers.
Execution flow
Phase 1: Detect stack and resolve profile
- Run
bin/detect-stack.sh --path . to get a StackDescriptor JSON.
- Resolve and load the active profile via
bin/load-profile.sh <name>
(resolves preferences → CLAUDE.md markers → "default" fallback).
Phase 2: Preview the workflow
- Run
bin/gen-ci.sh --profile <profile> --stack <stack> --target . --dry-run to preview the generated workflow.
- Show the user what will be generated:
- Template selected (typescript/python/go/rust/generic)
- Jobs and steps (lint, typecheck, test)
- Package manager and version matrix
- Path filters (if monorepo)
Phase 2.5: Offer governance check
If the profile has a governance block, or if the user mentioned
"governance", "health check", or "drift check", offer to also
generate the governance-check workflow:
"Also generate a governance check that runs doctor on every PR
and posts a health report comment? (adds governance-check.yml)"
If the user accepts (or originally asked for it), add --governance
to the gen-ci.sh invocation.
Phase 3: Confirm and write
- Ask the user: "Write this CI workflow to
.github/workflows/ci.yml?"
- On confirmation, run:
bin/gen-ci.sh --profile <profile> --stack <stack> --target . [--governance]
- Report what was written (ci.yml, and governance-check.yml if
--governance).
Phase 4: Suggest next steps
- Suggest:
- "Run
/nyann:gen-templates to add PR and issue templates"
- "Run
/nyann:doctor to check overall repo health"
- If governance was generated: "Add a
governance block to your
profile to customize threshold and severity"
- "Commit and push to see the workflow run"
Key constraints
- The generated workflow uses marker comments (
# nyann:ci:start / # nyann:ci:end). Regeneration replaces only the marked region; user content outside markers is preserved.
- If the profile has
ci.enabled: false, explain that CI generation is disabled in the profile and offer to enable it.
- If
.github/workflows/ci.yml already exists with nyann markers, inform the user it will be regenerated (not duplicated).
- If
.github/workflows/ci.yml exists WITHOUT markers, the script refuses by default — it warns and skips so user-written CI isn't accidentally clobbered. Pass --allow-merge-existing to gen-ci.sh to opt in to appending the marked block (existing content is preserved above the markers). Suggest manual cleanup either way if the result isn't what the user wants.
Error handling
- No stack detected → use
generic.yml template, warn that lint/test steps are placeholders
- No profile found → use
default profile (CI disabled by default — offer to enable)
- Template file missing → die with error pointing to
templates/ci/ directory
Governance check details
The --governance flag generates .github/workflows/governance-check.yml:
- Runs
bin/doctor-ci.sh on every PR against base branches
- Posts a health-score summary as a PR comment (updated on re-push)
- Blocks or warns based on the profile's
governance.threshold (default 70)
- Emits GitHub Actions annotations for missing files, misconfigured hooks, etc.
Profile governance configuration (optional — all fields have defaults):
{
"governance": {
"enabled": true,
"threshold": 70,
"severity": "block",
"ignore": ["orphans", "stale"]
}
}
| Field |
Default |
Effect |
enabled |
true |
Set false to disable governance check generation |
threshold |
70 |
Minimum health score (0-100) to pass the gate |
severity |
"block" |
block = fail check; warn = annotate only; off = skip |
ignore |
[] |
Categories excluded from score (e.g. orphans, stale) |
When to hand off
- "Add PR and issue templates too" →
gen-templates skill.
- "Check repo health" →
doctor skill.
- "Apply branch protection" →
gh-protect skill.
- "Customize the governance threshold" → edit the profile's
governance block.
- "Commit and ship" →
commit skill, then ship skill.
1---2name: gen-ci3description: Generate GitHub Actions CI workflows for this repository. TRIGGER ON: 'generate CI', 'add GitHub Actions', 'create CI workflow', 'set up CI', 'add CI/CD', 'create a CI pipeline', 'generate CI/CD', 'add continuous integration', 'set up GitHub Actions', 'add a lint+test workflow', 'add governance check', 'add PR health check', 'add drift check to CI', 'set up governance gate', 'enforce governance in CI'. Generates .github/workflows/ci.yml with lint, typecheck, and test jobs, and optionally .github/workflows/governance-check.yml with drift + health-score PR gating.4---56# gen-ci — Generate GitHub Actions CI Workflow78You are the gen-ci skill. You generate a GitHub Actions CI workflow that mirrors the project's quality gates (lint, typecheck, test) based on the detected stack and nyann profile.910## When to trigger1112- User asks to generate CI, add GitHub Actions, create a CI workflow, or set up CI/CD13- User asks to add continuous integration, create a pipeline, or add a lint+test workflow14- User asks to add a governance check, PR health check, drift check to CI, or governance gate15- User is bootstrapping a new project and wants CI1617**DO NOT trigger on:** general questions about CI/CD concepts, debugging existing workflows not managed by nyann, or requests to modify workflows outside nyann markers.1819## Execution flow2021### Phase 1: Detect stack and resolve profile22231. Run `bin/detect-stack.sh --path .` to get a StackDescriptor JSON.242. Resolve and load the active profile via `bin/load-profile.sh <name>`25 (resolves preferences → CLAUDE.md markers → `"default"` fallback).2627### Phase 2: Preview the workflow28294. Run `bin/gen-ci.sh --profile <profile> --stack <stack> --target . --dry-run` to preview the generated workflow.305. Show the user what will be generated:31 - Template selected (typescript/python/go/rust/generic)32 - Jobs and steps (lint, typecheck, test)33 - Package manager and version matrix34 - Path filters (if monorepo)3536### Phase 2.5: Offer governance check3738If the profile has a `governance` block, or if the user mentioned39"governance", "health check", or "drift check", offer to also40generate the governance-check workflow:4142> "Also generate a governance check that runs doctor on every PR43> and posts a health report comment? (adds `governance-check.yml`)"4445If the user accepts (or originally asked for it), add `--governance`46to the gen-ci.sh invocation.4748### Phase 3: Confirm and write49506. Ask the user: "Write this CI workflow to `.github/workflows/ci.yml`?"517. On confirmation, run:52 ```53 bin/gen-ci.sh --profile <profile> --stack <stack> --target . [--governance]54 ```558. Report what was written (ci.yml, and governance-check.yml if `--governance`).5657### Phase 4: Suggest next steps58599. Suggest:60 - "Run `/nyann:gen-templates` to add PR and issue templates"61 - "Run `/nyann:doctor` to check overall repo health"62 - If governance was generated: "Add a `governance` block to your63 profile to customize threshold and severity"64 - "Commit and push to see the workflow run"6566## Key constraints6768- The generated workflow uses marker comments (`# nyann:ci:start` / `# nyann:ci:end`). Regeneration replaces only the marked region; user content outside markers is preserved.69- If the profile has `ci.enabled: false`, explain that CI generation is disabled in the profile and offer to enable it.70- If `.github/workflows/ci.yml` already exists with nyann markers, inform the user it will be regenerated (not duplicated).71- If `.github/workflows/ci.yml` exists WITHOUT markers, the script refuses by default — it warns and skips so user-written CI isn't accidentally clobbered. Pass `--allow-merge-existing` to gen-ci.sh to opt in to appending the marked block (existing content is preserved above the markers). Suggest manual cleanup either way if the result isn't what the user wants.7273## Error handling7475- No stack detected → use `generic.yml` template, warn that lint/test steps are placeholders76- No profile found → use `default` profile (CI disabled by default — offer to enable)77- Template file missing → die with error pointing to `templates/ci/` directory7879## Governance check details8081The `--governance` flag generates `.github/workflows/governance-check.yml`:82- Runs `bin/doctor-ci.sh` on every PR against base branches83- Posts a health-score summary as a PR comment (updated on re-push)84- Blocks or warns based on the profile's `governance.threshold` (default 70)85- Emits GitHub Actions annotations for missing files, misconfigured hooks, etc.8687Profile governance configuration (optional — all fields have defaults):88```json89{90 "governance": {91 "enabled": true,92 "threshold": 70,93 "severity": "block",94 "ignore": ["orphans", "stale"]95 }96}97```9899| Field | Default | Effect |100|---|---|---|101| `enabled` | `true` | Set `false` to disable governance check generation |102| `threshold` | `70` | Minimum health score (0-100) to pass the gate |103| `severity` | `"block"` | `block` = fail check; `warn` = annotate only; `off` = skip |104| `ignore` | `[]` | Categories excluded from score (e.g. `orphans`, `stale`) |105106## When to hand off107108- "Add PR and issue templates too" → `gen-templates` skill.109- "Check repo health" → `doctor` skill.110- "Apply branch protection" → `gh-protect` skill.111- "Customize the governance threshold" → edit the profile's `governance` block.112- "Commit and ship" → `commit` skill, then `ship` skill.