ds-devops
Skill1 starsChanged 4 months agoMITView on GitHub
DevOps audit — CI/CD pipelines, code signing, dependency management, deployment config for any stack. Use when auditing or setting up CI/CD and release infrastructure.
- Reads credentials
In this repository33 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- ds-backendSkill
- ds-benchmarkSkill
- ds-blueprintSkill
- ds-briefSkill
- ds-buildSkill
- ds-commitSkill
- ds-complianceSkill
- ds-debugSkill
- ds-deploySkill
- ds-depsSkill
- ds-docsSkill
- ds-fixSkill
- ds-freezeSkill
- ds-frontendSkill
- ds-initSkill
- ds-issueSkill
- ds-launchSkill
- ds-mobileSkill
- ds-pipelineSkill
- ds-productizeSkill
- ds-prSkill
- ds-qualitySkill
- ds-releaseSkill
- ds-repoSkill
- ds-researchSkill
- ds-reviewSkill
- ds-rigSkill
- ds-shipSkill
- ds-simplifySkill
- ds-testSkill
- ds-tuneSkill
The file
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 7 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 35
Every finding cites file and line — never infer or assume.
- Distinctive: line 36
Only audits CI/CD, signing, dependencies, release pipelines.
- Very specific: line 100
CI detection: Search for .github/workflows/, .gitlab-ci.yml, bitrise.yml, Jenkinsfile, .circleci/, azure-pipelines.yml, codemagic.yaml.
- Very specific: line 102
Scope selection: Default: all — no menu. --ask: ask which scopes to audit (default: all).
- Distinctive: line 118
Search for relevant config + build files.
- Distinctive: line 119
Search contents for violation patterns.
- Distinctive: line 120
Read files to verify findings in context.
- Distinctive: line 136
Gate: Every in-scope domain scanned.
- Very specific: line 160
Default: auto-transition to fix.
- Very specific: line 184
Gate: All items resolved. If fails → unresolved → mark skipped (no decision), continue.
- Distinctive: line 197
No cascading breakage after fixes
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/ds-devops
Broken CI pipelines, unsigned builds, and outdated dependencies silently erode release quality. This skill audits your entire DevOps setup and flags what needs fixing.
DevOps Audit — CI/CD pipelines, code signing, dependency management, and deployment configuration for any project type.
Completion Evidence — applies to every phase: Report
done/OKonly with the machine-checkable evidence the gates name — the exact command run and its observed output (orfile:linediff). Missing evidence → reportINCOMPLETEplus what is missing. Self-assessment is never evidence. (This band repeats at file end by design — both copies are normative.)
Triggers
- User runs
/ds-devops - User asks to audit or review CI/CD, pipelines, deployment, or DevOps setup
- User asks about dependency management, code signing, or CI quality gates
- User asks why CI is failing or how to set up CI for a project
Triggers — INVOKE / DON'T INVOKE
| INVOKE | DON'T INVOKE |
| "audit CI/CD pipeline", "review GitHub Actions workflows" | "deploy the app to infra" (→ ds-deploy) |
| "set up code signing for releases" | "configure VPS / containers / SSL" (→ ds-deploy) |
| "audit release pipeline + version bump workflow" | "audit repo settings / branch protection" (→ ds-repo) |
| "dependency audit gate in CI" | "monitoring, alerting, SLOs" (→ ds-deploy) |
Contract
Dimensions: D6, C1 (CI/CD security) Framework alignment (advisory): DORA (D6), OWASP ASVS (C1).
- Every finding cites file and line — never infer or assume.
- Only audits CI/CD, signing, dependencies, release pipelines.
- Standalone. Uses blueprint profile or
ds/audit/findings.mdwhen available; own analysis when absent. - Full accounting enforced: every finding and planned check ends in an explicit disposition (fixed / skipped + reason / only you can do); summary totals balance.
- Pre-existing / out-of-scope errors detected during work are NOT skipped — fixed inline or escalated with concrete blocker.
<!-- portable-only --> - State-exempt: audit is regenerable; generated configs/fixes land in the working tree — git is the durable record.
Arguments
| Flag | Effect |
--scope={x} | Comma-separated: ci, signing, deps, release-pipeline, or all |
--preview | Dry run — show what would be checked without loading rules or scanning |
--ask | Interactive run — menus, approval batches and confirmations at every decision point. Without it every decision resolves by best judgment from the evidence gathered and is recorded in the summary; only the publish/irreversible exception list is skipped and recorded only you can do. |
Without flags: scope resolves to all, by best judgment and recorded in the summary. --ask: present the scope selection menu.
Scopes
42 rules across 15 domains, loaded per scope from references/rules-*.md.
| Scope | What It Checks |
| ci | CI/CD pipeline presence, quality gates, format / analyze / test / build stages, workflow lint layers (actionlint + zizmor), pull_request_target misuse, agent/tool security, CI-built container + cloud-auth hardening, dependency/build caching, monorepo affected-detection, test-stage time budget, secrets hygiene, macOS runner cost |
| signing | Code signing automation, certificate management, keystore security |
| deps | Dependency audit gate, outdated detection, cross-dependency compatibility, breaking changes, supply-chain provenance (SCA) |
| release-pipeline | Release automation, version bump workflow, registry publish auth (trusted publishing / OIDC — DOP-21), build provenance / artifact attestation, backup & DR posture, GITHUB_TOKEN downstream-trigger gap, deploy concurrency + environment gates |
| Scope | Runs when (signal) | Otherwise |
| ci | any source — every project is checked for CI/CD presence and hygiene | — |
| signing | platforms intersects {ios, android, desktop} | N/A — no signable target detected |
| deps | a dependency manifest is present (package.json, go.mod, Cargo.toml, pyproject.toml, Gemfile, pom.xml/build.gradle, Package.swift, *.csproj, mix.exs, composer.json, …) | N/A — no dependency manifest found |
| release-pipeline | deploy ≠ none, or a registry-publish / release-automation config exists (release-please, semantic-release, a publish workflow) | N/A — no release or publish pipeline detected |
An unknown signal never excludes a scope; --scope= overrides the table for the named scopes; --ask shows the resolved table before running.
Out of scope — delegated. Monitoring, alerting, SLOs, and error-budget policy are ds-deploy's scope (already reflected in Delegation below): present → delegate; absent → gap-note monitoring not analyzed — requires ds-deploy. This skill audits the pipeline that ships the code, not the code's production behavior once shipped.
Delegation
Owns: ci, signing, deps-audit, pipeline-structure | Delegates: ds-deps → deps-upgrade-execution; ds-deploy → infra / container / TLS / monitoring | Receives: ds-deploy → CI pipeline structure verification; ds-ship → Phase 5 infra chain; ds-release → CI run + attestation verification after a publish
Execution Flow
Detect → Configure → Scan → Report → [Fix] → [Needs-Approval] → Summary
Phase 1: Detect
- Upstream artifacts: Profile →
Toolchain:, Type + Stack,Deploy:. Findings(ci, signing, deps, release-pipeline) → verify + use. Absent → own analysis. Project type detection:
Type Detection signal Flutter / Dart pubspec.yamlwithflutter:Node.js package.jsonPython pyproject.toml,setup.py,requirements.txtGo go.modRust Cargo.tomlJava / Kotlin build.gradle,pom.xmliOS *.xcodeproj,Package.swiftAndroid build.gradlewithandroid {}Monorepo lerna.json,nx.json,turbo.json, workspace config- CI detection. Search for
.github/workflows/,.gitlab-ci.yml,bitrise.yml,Jenkinsfile,.circleci/,azure-pipelines.yml,codemagic.yaml. - Dependency tooling. Detect
dependabot.yml,renovate.json, lockfiles,.nvmrc,.tool-versions. - Scope selection. Default:
all— no menu.--ask: ask which scopes to audit (default: all). A disambiguating--scopeflag skips the menu in either case.
Gate: Project type matched to a detection signal (step 2) and a CI platform config file found (step 3); scope confirmed. If fails → Default: undetermined type/platform resolves to whatever manifest signals are present, or "no CI configured" (an Edge Case, not a blocker) when truly absent — recorded in the summary, no prompt. --ask: undetermined type → ask "What type of project? (Flutter / Node / Python / Go / Rust / Java / iOS / Android / Monorepo)"; undetected CI platform → ask "Which CI platform do you use?"; unconfirmed scope after prompt → default all scopes, announce.
Phase 2: Rule Loading
Load the rules file for each scope the resolution table above marks ran: references/rules-ci.md (ci), references/rules-signing.md (signing), references/rules-deps.md (deps), references/rules-release-pipeline.md (release-pipeline). Rules are project-type-aware — skip rules that don't apply to detected stack.
Gate: Rules file(s) loaded + filtered to detected project type; inapplicable rules excluded. If fails → a scope's rules file is unreadable → WARN "rules file unavailable for {scope} — proceeding with built-in heuristics only", continue scan using embedded rules; do not abort.
Phase 3: Scan
- Findings file check:
ds/audit/findings.mdfresh (its metagit_hashequalsgit rev-parse HEADoutput AND produced in the current run-cycle; prior-cycle — however recent — is stale, diff context only) → read findings matching scopes (ci, signing, deps, release-pipeline). Per match: verify still valid (re-read{file}:{line}); uncovered scopes → run full analysis. Stale/absent → orchestrated run: request/ds-blueprint --refreshand wait; standalone: own scoped analysis, appended with ownsource+ currentgit_hash.
For each scope:
- Search for relevant config + build files.
- Search contents for violation patterns.
- Read files to verify findings in context.
- Skip rules that cannot be verified.
Twelve-Factor pipeline checks (../core/principles.md §3):
| Factor | Check | Flag when |
| 5 Build/Release/Run | Build artifact immutable; same artifact promoted across environments | CI rebuilds from source per environment |
| 12 Admin processes | Migrations / seeds / backfills run as isolated one-off commands against the same release artifact | Embedded in the deploy job or run on dev workstations |
Workflow lint & security (ci scope, advisory tools): actionlint (correctness) or zizmor (security anti-patterns) present → run it, merge findings into the report. .github/workflows/ exists and either tool absent → HIGH finding "workflow lint layer missing — add actionlint + zizmor", with the prose rules (references/rules-ci.md DOP-19) as this run's fallback; never auto-install. pull_request_target combined with checkout/execution of untrusted PR code → CRITICAL (DOP-20 — the March 2026 trivy-action → LiteLLM supply-chain incident pattern).
Confidence + skip patterns: per ../core/severity-score-categories.md.
Findings verification (runs on every finding — no skip path): HIGH → auto-include · MEDIUM → auto-include by best judgment, recorded in the summary (--ask turns this into a review prompt) · LOW → shown as potential issue.
Gate: Every in-scope domain scanned; all findings recorded with severity + confidence. If fails → unscan-able scope (file unreadable, tool unavailable, unexpected format) → mark scope partial, record MEDIUM "scan incomplete for scope {scope} — {reason}", continue to Report; do not silently omit scope.
Phase 4: Report
## DevOps Audit Report — {project-name}
Type: {project-type} | CI: {ci-platform} | Date: {today}
### Findings
| # | Rule | Sev | File:Line | Issue | Impact | Fix | Conf |
### Potential Issues (LOW confidence)
| # | Rule | File:Line | Issue | Suggested Fix |
### Summary
| Scope | CRITICAL | HIGH | MEDIUM | LOW | Total |Severity: CRITICAL > HIGH > MEDIUM > LOW. Uncertain → choose lower.
Gate: Report presented with all findings + severities + summary. If fails → missing scope row → re-read the collected findings, add row with recorded count (or 0 findings), re-emit report; do not proceed to Phase 5 until table accounts for every selected scope.
Phase 5: Post-Report
Default: auto-transition to fix. --preview: report only — stop here (Phase 6 does not run). --ask: ask Fix all / CRITICAL+HIGH only / Review each / Report only.
Gate: Post-report action determined. If fails → no response under --ask → default to auto-transition to fix, announce, proceed to Phase 6.
Approval-menu convention (Phases 6-7): under --ask, present each item on one compact line ([severity] title — file:line), grouped by severity with counts; state the question; offer Apply all plus per-severity bulk (Apply all HIGH) alongside the total (CRITICAL bulk still confirms per item); approve-all excludes CRITICAL; all = exactly the displayed set.
Phase 6: Fix [SKIP if --preview]
- Checkpoint pre-step (before the first file write, ../core/checkpoint-protocol.md):
git status --porcelain→ non-empty → Default: proceed only when the pre-existing dirty files are disjoint from the planned fix targets; a fix targeting a dirty file resolvesonly you can do— no prompt.--ask: ask Commit first (recommended) / Stash / Proceed anyway (risk stated). Tree cannot be checkpointed → apply no fix over uncommitted unrelated changes; report the blocker. - Present fix plan per the approval-menu convention — one line per fix (rule,
[severity], file:line, action); questionApply these N fixes?. - Confirmation: Default: resolves by best judgment, no confirmation shown.
--ask: ask Apply all / per-severity bulk / proceed / cancel. - Apply fixes grouped by file.
- Present fix summary.
ds-devops: {OK|WARN|FAIL} | Fixed: {n} | Skipped: {n} | Failed: {n} | Total: {n}Gate: fixed + skipped + failed = total; every modified file re-read and verified; every finding/action has a disposition. If fails → undisposed finding → skipped (accounting gap); un-re-readable modified file → mark fix failed (verify error), revert file change; counts imbalanced → status WARN.
Phase 7: Needs-Approval Review [needs_approval > 0]
Default: items resolve by best judgment (fixed or failed), except items matching the publish/irreversible exception list, which become skipped (only you can do) — no review step shown. --ask: present each item compactly (one line [severity] title — file:line) grouped by severity with counts, and state the question (Approve these N items?); ask Apply all / per-severity bulk (Apply all HIGH … alongside the total, CRITICAL bulk still confirms per item) / Review Each / Skip All. approve-all excludes CRITICAL; "all" = exactly the displayed set.
Gate: All items resolved. If fails → unresolved → mark skipped (no decision), continue; do not retry.
Effect: 1-5 concrete bullets, real changes only — each states what got better and why it matters, in plain language a non-technical reader understands (quantified when measurable), never the mechanical activity; they are the closing block's Effect line. Example shapes (placeholders, not literal output):
CI pipeline: {n} actions SHA-pinned (was@v{x}tag references) — supply-chain attack via action tag overwrite eliminatedQuality gates wired (lint → typecheck → test → build) withconcurrencyandpermissions: read— broken releases caught before they hit usersCode signing automation: {n} secrets moved to GitHub Actions secret store — keystore no longer drifts between local + CIDep audit gate added — CVE in a transitive dep now blocks merge instead of landing in production
Zero-finding run: CI/CD scope clean — pipeline meets reviewed checks.
Quality Gates
- No cascading breakage after fixes
- Format preservation (indentation, config style)
- Scope boundary (only touch required lines)
- Stack consistency (correct CI syntax, valid config)
- Shell quoting (../core/principles.md §5): every shell line in generated CI configs uses double-quoted variable references (
"$VAR","${VAR}"). Reject metacharacter injection in dynamic values. Flag unquoted user-data interpolation as CRITICAL. - W10: defer detection to fresh
ds/audit/findings.md— own scan only for scopes not covered. - Mechanical Done Gate: resolve
{check-cmd}once at setup — the ds-quality enforcement arm when installed, else the stack-native chain from ../core/toolchains.md plus the workflow-file linters this skill runs when.github/workflows/is present:actionlint(correctness — syntax, expression types, action inputs, embedded shell) andzizmor .github/workflows/(security anti-patterns) chained after the stack-native steps, plusyamllintwhen present. Either tool absent → gap-note "workflow lint layer missing — add actionlint + zizmor" in the aggregate result, never a silent skip; capture the baseline; re-run after each change batch and once in aggregate before reporting done. New red → fix (≤3 attempts, same command), then revert the offending change and recordreverted; baseline red is reported red-at-baseline, never inherited; no tooling detectable at all → report the Verification-Infrastructure Gap, never skip silently. - W1: cite file:line, never assume. W2: check consumers after modify. W3: only task-required lines. W4: re-read after gap. W5: uncertain → lower severity. W6: verify all phases output. W7: dedup file:line. W8: no raw shell interpolation.
<!-- portable-only -->
Error Recovery
| Situation | Action |
| CI platform not detected | Default: treated as "no CI configured", reported as a HIGH finding (Edge Cases) instead of blocking — no ask. --ask: ask user which CI platform they use. |
| Signing certificate expired or missing | Flag as CRITICAL, generate renewal checklist |
| Dependency audit tool unavailable | Skip dependency scope, warn in summary |
| Pipeline config syntax varies by CI platform | Detect platform first, generate platform-specific config |
Edge Cases
| Scenario | Behavior |
| No CI config found | Report as HIGH finding, suggest setup |
| Multiple CI platforms | Audit all, note which is primary |
| Monorepo | Check per-package CI config if applicable |
| No dependency lockfile | Report as HIGH, suggest committing lockfile |
| CLI tool not available | Skip that check, note in report |
Completion Evidence — final gate (duplicate of the opening band by design): Before the summary line, show the evidence for every gate that ran — command plus observed output; a phase with no visible output was not executed — execute it now. Report
done/OKonly with this evidence present; otherwise reportINCOMPLETEplus what is missing.<!-- portable-only -->
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

