Skip to content
cccskills
FreePublished on GitHubEnglish overview

speed-up-ci

Measure pull request CI times, find which jobs and steps consume the time, and test one speed improvement at a time. Compare against a suitable control and keep a change only when the measured gain exceeds noise and every check still catches the same problems.

OriginalShow the original description

CI is slow, time to green, how long do checks take, p50/p90, make CI faster, speed up a job or spec, hillclimb CI. Use to measure PR CI time, find where a job's seconds go, and land speedups one measured change at a time without weakening any check.

different-ai/openwork24,317 stars(GitHub 24,317 + cccskills 0)
Works withGitHubMySQL

Run score Not tested

See how to install

Good for

  • Measuring time to green across pull requests
  • Finding slow jobs, steps, or end-to-end stages
  • Comparing a CI speed change against a control run
  • Reducing CI time while preserving all checks

Overview

What it does

This skill measures CI performance instead of relying on impressions. It calculates how long pull requests take from push until required checks pass, and until all GitHub Actions checks finish. It records baselines using medians and upper percentiles, then examines job and step timings and test traces to find where time is spent. It tests one improvement hypothesis at a time and compares results under similar conditions.

When it helps

Use it when CI is slow and the cause is unclear. It helps teams identify opportunities such as service startup, duplicate builds, or repeated setup from measured data. It is intended for speeding up CI while keeping the checks that catch defects and the checks required before merge.

Example requests

  • “Measure how long CI took to pass on recent pull requests.”
  • “Find which steps in this CI job take the most time.”
  • “Try one improvement and compare CI times before and after.”

Notes

The workflow uses GitHub Actions run information and repository CI measurement scripts. Comparisons need a baseline run on the same type of runner. Checks must not be weakened or skipped; after a change, they must still detect the same problems.

This overview was written by AI (OpenAI Codex) from the public SKILL.md. Check the original below for the exact behavior.

Document check

AI checked the SKILL.md for operations that need care and for setup requirements. The score comes only from actually running the skill (hands-on test).

SafetyAre sending data, deleting files, and running commands disclosed?
AGoodIt forbids weakening checks and reusing failed results.
Easy setupDoes it need few tools or API keys, and are they documented?
BPartly lackingIt depends on GitHub Actions data and repository measurement scripts.

Not counted in the score. Rated by AI (OpenAI Codex) as of Oct 28, 2026. Treat it as a guide and read the original before installing.

Disagree? Request a re-evaluation

Tell us which point is wrong and why. No login needed. We will check it against the SKILL.md, redo the evaluation, and show the result here.

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Files included (1)

  • SKILL.md5.6 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Skill: Speed up CI

CI speed is a measured number, not a feeling. Measure it the same way every time, find where the seconds actually go, change one thing, measure again, keep it only if the number moved and every check still guards what it did.

1. Measure time to green

node .github/scripts/ci-time-to-green.mjs --hours 24            # all PRs
node .github/scripts/ci-time-to-green.mjs --hours 6 --branch-prefix perf/ci-x --json
  • required: push → last merge-gating check green (openwork-tests-required, warden-clear).
  • full: push → last GitHub Actions check green. "Evidence preview" is ignored (a link, not a test).
  • Failed or unfinished commits are excluded from the percentiles and counted separately.

Record the baseline (p50/p90/p99 and n) before changing anything. Compare p50/p90 with at least ~20 commits; one PR's run is a data point, not a trend.

2. Find where the seconds go

Never guess from YAML. Read the timings GitHub and the test kit already record.

# Every job and step of a run, with durations
gh run view <run-id> --json jobs --jq '.jobs[] | "\(.name)", (.steps[] | "  \(.name)")'
gh api repos/different-ai/openwork/actions/jobs/<job-id> \
  --jq '.steps[] | "\(((.completed_at|fromdate)-(.started_at|fromdate)))s \(.name)"'
# Full log (strip colours)
gh api --allow-escape-sequences repos/different-ai/openwork/actions/jobs/<job-id>/logs | sed 's/\x1b\[[0-9;]*m//g'

For e2e specs, download the run's pr-proof-* artifacts and read test-runs/*/test-run.json: every trace entry has a stage, channel, verb and ms. Sum ms by (stage, channel, verb): world/seed/den|desktop|appWeb is time spent starting services; body/* is the test. Compare createdAt/closedAt with the first and last trace entry to see setup and teardown the trace does not cover.

Things that look slow but are not the cause until measured: runner pickup (usually ~3s), the test's own assertions. Things that usually are: starting services per test, rebuilding the same commit in several jobs, waiting on something no assertion uses, repeated setup in every matrix job.

3. Choose the change: strongest rung first

Work down this list (the classic performance mantras) and stop at the first rung that reaches the target:

  1. Don't do it. Remove waits and work whose result nothing checks (e.g. waiting for a reviewer snapshot to save before reporting a verdict).
  2. Don't do it again. Reuse a result whose inputs are byte-identical: build once per commit and share it; skip a suite whose input hash already passed. Failures are never reused.
  3. Do it less. Start one service per job and isolate tests inside it (one organization per test) instead of one service per test.
  4. Do it later. Move work that need not block a push into the merge queue.
  5. Do it when nobody is waiting. Pre-warm images and worlds on dev.
  6. Do it concurrently. Shard long serial steps.
  7. Do it cheaper. Faster flags, in-memory databases, fewer statements.

Rung 7 alone rarely gets far: folding the Den API test schema DDL and an in-memory MySQL saved 18s on a 134s step. Rungs 1-3 remove minutes.

4. The loop

  • One hypothesis per change, naming a mechanism ("den-web runs next dev and recompiles per test"), never "try caching".
  • Measure before and after on CI, against a control on the same runner type at about the same time (another PR on current dev, or the same job on dev). Laptop wall times are not evidence: other work on the machine moved the same suite between 94s and 147s.
  • Keep a change only when the number moves past noise and every gate stays green. Otherwise revert it completely and record why.
  • Log every attempt, kept or not, in a decision.tsv outside the repo: id, hypothesis, change, before, after, delta, tests, verdict, note.
  • Independent hypotheses can run in parallel, each in its own worktree and PR. Give each lane the baseline, the measured facts and these rules.

Guardrails

  • Never weaken a check for speed. No skipped specs, no soft-failing steps, no looser assertions. A moved check must still run before merge (e.g. in the merge queue) and fail for the same defects.
  • Never make the shared clone shallow. git fetch --depth=1 in any worktree writes .git/shallow for every worktree and the main checkout; rebases then replay the whole history. CI scripts that fetch with depth 1 are for CI only. If it happens: confirm the parents of the shallow commit exist (git cat-file -e), move .git/shallow aside, run git fsck --connectivity-only.
  • Work in a worktree from fresh origin/dev; do not touch someone else's checkout, branch or running containers. Start your own MySQL on a free port with a unique name, and remove it afterwards.
  • Den API tests assume UTC: run them locally with TZ=UTC, or the hourly sign-in tests fail for reasons unrelated to your change.
  • Check open PRs for the same files before starting (gh pr list), and re-measure after rebasing onto a dev that changed the job you measured.
  • A red dev invalidates every comparison: fix or wait for it first (diagnose-a-red-run).

Evidence in the PR

Name the job and step, the control run and your run, and the seconds: "Run Den API security tests: 134s → 116s (run A vs run B, same runner)." State Release note: none. Follow open-a-pr.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

add-a-feature

FreeSummary

Manage OpenWork feature releases with feature flags, switches that control access to new behavior. Register features before coding, release them by organization and deployment, prepare a global shutdown option, and remove temporary flags after rollout.

  • Registering a feature before implementation
  • Releasing a feature to selected organizations
  • Separating cloud and self-hosted availability
different-ai/openwork24.3KUpdated Oct 30, 2026

Connect OpenCode browser tools to a locally running OpenWork Electron app to inspect its UI, enter a task, and check the response. This skill supports exploration and debugging through CDP, Chrome's remote control protocol.

  • Connecting browser tools to a local Electron development app
  • Inspecting screen state during debugging
  • Entering a task in the composer and running it
different-ai/openwork24.3KUpdated Oct 30, 2026

Check added lines in a change for information identifying customers, prospects, partners, or outside individuals. Report locations and generic remediation without reproducing identities, and escalate cases where the information is already public.

  • Checking changes for customer and partner identities
  • Reviewing documents and test data for identifying details
  • Reporting disclosure locations without repeating identities
different-ai/openwork24.3KUpdated Oct 30, 2026

Connects supported AI clients, including Claude Code and Codex, to OpenWork through MCP, a protocol for accessing external tools. It guides account sign-in and verifies that tools for finding and running organization capabilities are available.

  • Connecting an AI client to OpenWork organization resources
  • Signing in and verifying available MCP tools
  • Switching organizations or troubleshooting authentication
different-ai/openwork24.3KUpdated Oct 30, 2026

Review an outside contributor’s pull request before running its code. Identify concealed behavior, obfuscated code, risky dependencies, and build hooks, with file locations and specific checks for maintainers to follow up.

  • Screening an outside contributor’s pull request before execution
  • Checking encoded code and unexplained network calls
  • Reviewing dependency changes and installation scripts
different-ai/openwork24.3KUpdated Oct 30, 2026

create-plugin

FreeSummary

Create an OpenCode plugin for OpenWork with custom tools and hooks, which run code at specific events. The skill builds the plugin file and adds its entry to the project configuration.

  • Adding custom tools to OpenWork
  • Creating a plugin to save and list notes
  • Running custom code before or after tool execution
different-ai/openwork24.3KUpdated Oct 30, 2026

See all skills by different-ai

Report a problem with this skill