monitor-ci
Skill2 starsChanged 4 days agoMITView on GitHub
Observe GitHub Actions, diagnose failing checks, fix scoped defects, and retry confirmed flakes within budget. Load after pushes, when investigating or waiting on CI, or to sweep dependency PRs.
17 other projects use a version of this.
Adopted by
Most recently taken up by
- getlarge/themoltnettheir own version, first seen Nov 3, 2026
- code-dimension/code-dimension-skillstheir own version, first seen Oct 17, 2026
- daveyplate/better-auth-uitheir own version, first seen Oct 9, 2026
- nrwl/nx-consoletheir own version, first seen Oct 8, 2026
- ever-co/ever-teamstheir own version, first seen Oct 8, 2026
- epam/ai-dial-chattheir own version, first seen Oct 8, 2026
Used with
Projects with it also use nx-import.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
SupabaseSkillnx-import
Import, merge, or combine repositories into an Nx workspace using nx import. USE WHEN the user asks to adopt Nx across repos, move projects into a monorepo, or bring code/history from another repository.
Also in 12 projects that use this
Other versions17 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 17
- nrwl/nx★ 29ksame name
- tsparticles/tsparticles★ 9.1ksame name
- better-auth-ui/better-auth-ui★ 1.7ksame name
- daveyplate/better-auth-ui★ 1.7ksame name
- nrwl/nx-console★ 1.4ksame name
- ever-co/ever-teams★ 606same name
- epam/ai-dial-chat★ 501same name
- getlarge/themoltnet★ 28same name
- conectlens/lenserfight★ 18same name
- anayatkhan1/kit★ 16same name
7 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository40 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .agents/skills/AGENTS.mdAGENTS.md
- attribute-ai-commitsSkill
- check-accessSkill
- choose-dependencySkill
- coordinate-landingSkill
- develop-featureSkill
- document-codeSkill
- git-conventionsSkill
- implement-featureSkill
- manage-versionsSkill
- open-pull-requestSkill
- plan-client-server-boundarySkill
- plan-featureSkill
- plan-ui-designSkill
- prefer-small-solutionsSkill
- prepare-releaseSkill
- register-ai-agentSkill
- resolve-pr-feedbackSkill
- triage-issuesSkill
- use-a-novel-cliSkill
- use-discordSkill
- write-bash-scriptsSkill
- write-design-systemSkill
- write-dockerfilesSkill
- write-frontendSkill
- write-frontend-testsSkill
- write-github-actionsSkill
- write-go-kitSkill
- write-go-serviceSkill
- write-goSkill
- write-go-testsSkill
- write-infraSkill
- write-js-packageSkill
- write-openapiSkill
- write-platformSkill
- write-project-docsSkill
- write-protoSkill
- write-sqlSkill
- write-svelteSkill
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 6 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 17 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 25
If checks are pending, start the background watch (Phase 1.2) and inspect available feedback while it runs.
- Distinctive: line 29
Use the service job map when interpreting an unfamiliar service job.
- Very specific: line 38
After pushing, observe the latest run on the current branch.
- Very specific: line 64
Wait with one command that ends when the checks do, started with the Bash tool's run_in_background=true:
- Distinctive: line 99
Look for: leftover debug/print statements, commented-out code, unresolved TODOs, missing or thin coverage for important behavior (record …
- Very specific: line 114
When the overall state is failure:
- Very specific: line 133
If --log-failed is still too large (thousands of lines for a test crash), narrow it with tail or grep:
- Distinctive: line 141
Never read the full run log unprefiltered.
- Distinctive: line 147
After applying a fix:
- Very specific: line 151
Create a new fix commit per git-conventions.
- Distinctive: line 157
Never push a fix without local verification.
“Common” is measured: kept by at least 6 in 10 of the 17 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Monitor CI
Load develop-feature for stage timing. CI validates both draft and ready PRs; green checks alone do not approve issue scope or finish testing and cleanup. Preserve existing checks, diagnose failures, and defer new broad coverage until scope approval.
While CI runs, use resolve-pr-feedback to check linked issue discussions and PR feedback together.
This skill owns observation, diagnosis, and retries; the development skill owns readiness.
The loop is observe → classify → fix → re-push → re-observe, with a retry budget. When the budget runs out, stop and escalate.
Choose the next action
- Identify the current branch/PR commit and its actual checks. Use the observation loop below.
- If checks are pending, start the background watch (Phase 1.2) and inspect available feedback while it runs.
- For a failure, read the failed step and the matching section of failure diagnosis before choosing a fix or retry.
- Use the service job map when interpreting an unfamiliar service job; the current repository workflow is the source of truth.
- For a sweep of Renovate or Dependabot PRs, or a wait for one to merge, read dependency PRs before classifying or landing them.
- Re-run the affected verification, preserve history, and observe the new commit. Stop at green or the escalation conditions below; green CI does not authorize a merge.
Phase 1: Observe
After pushing, observe the latest run on the current branch. Prefer gh pr checks when a PR
exists (cleaner output), otherwise gh run list --branch <branch>.
1.1 Check overall state
# If a PR is open for this branch
gh pr checks --watch=false
# Otherwise (no PR yet, e.g. just pushed a feature branch)
gh run list --branch "$(git rev-parse --abbrev-ref HEAD)" --limit 1 \
--json databaseId,status,conclusion,namePossible states:
queued/in_progress/pending→ start the background watch (Phase 1.2)completed+success→ done, hand off to the developer; a PR stillBLOCKEDwith required checks shown as "Expected" has stranded required checkscompleted+failure→ classify and fix (Phase 2)completed+cancelled→ superseded, timed out, or stopped by hand; read why before retryingcompleted+skipped→ a job itneeds:failed or skipped, so fix that job; on a green run, only jobs with anif:skip
1.2 Wait in one background watch
Wait with one command that ends when the checks do, started with the Bash tool's
run_in_background=true:
timeout 40m gh pr checks <pr> --repo <org>/<repo> --required --watch --interval 10
# No PR yet: watch the run itself
timeout 40m gh run watch <run-id> --repo <org>/<repo> --exit-statusIts exit resumes you, so no model turn runs until there is a result to read. Polling inside that one command costs nothing; polling from the model re-reads the whole conversation at every check. So never sleep and re-check across turns, never wait in the foreground, and never hand-write a loop with a fixed number of rounds.
- Watch only the required checks, to the end.
review-gatefails until a reviewer approves, so--fail-fastwould stop at the first poll, and the full list lets you fix every failure in one round. Read the output: a lonereview-gatefailure means CI is green and the PR awaits review. Pipe nothing after the watch, so its exit status stays its own. - Set the
timeoutto about twice the repository's usual run. When it fires, readgh pr checksonce: a check still pending after the others completed is stuck, so report it rather than wait on it. - A merged or closed PR ends the wait: stop the watch and report the result.
- While it runs, do the next work: the PR body, issue and PR feedback with
resolve-pr-feedback, the next branch or follow-up of the task. End the turn once nothing else is left; the watch's exit resumes it.
Review your diff before pushing
Review your own diff once before the first push: a defect found after the push costs another CI round. Read the branch's own diff and check it critically:
git diff master...HEAD # or the stacked parent branchLook for: leftover debug/print statements, commented-out code, unresolved TODOs, missing or
thin coverage for important behavior (record broad additions for stage 3 on a draft), error paths
that don't report (see the every-span'd-layer rule), naming/layering drift from the relevant
write-* skill, and
anything the PR body claims but the diff doesn't do.
- Fix a clear defect before the push; one found later is fixed like any CI finding (Phase 3).
- Something arguable (a design trade-off, a deferred concern) is surfaced, not silently rewritten: note it and raise it in the final CI report so the user decides.
Review once per branch; after a fix commit, re-review only the new diff. Keep it scoped to
git diff: this reviews the change, not the whole repo.
1.3 Get the failing run details
When the overall state is failure:
# Identify the failing run ID from gh pr checks or gh run list output, then:
gh run view <run-id> --json jobs \
--jq '.jobs[] | select(.conclusion=="failure") | {name, databaseId, conclusion}'That lists the failing jobs by name and ID, the minimum needed to decide what to fix.
1.4 Read ONLY the failed step logs
The full run log is huge and floods context. Always use --log-failed to get only the
failing steps:
gh run view <run-id> --log-failed --job <job-id>If --log-failed is still too large (thousands of lines for a test crash), narrow it
with tail or grep:
gh run view <run-id> --log-failed --job <job-id> | tail -n 200
gh run view <run-id> --log-failed --job <job-id> | grep -E "FAIL|Error|error:" | head -n 50Never read the full run log unprefiltered. Never fetch logs for passing jobs.
Phase 3: Fix and Re-push
After applying a fix:
- Re-run the relevant local target to confirm green (
a-novel test --type=go -y,pnpm lint:go,pnpm generate:go, etc.) - Create a new fix commit per
git-conventions. Do not amend or rewrite history on this already-pushed branch — an amend strands CI run logs and review threads anchored to the old SHAs. - Push. A push to the branch automatically triggers a new CI run.
- Return to Phase 1.
Never push a fix without local verification. CI confirms the fix; it is not the test runner.
Phase 4: Retry Budget and Escalation
Retry budget: at most 3 fix attempts for the same root cause, then stop and escalate to the user. A test still failing after two real fixes means the diagnosis is wrong, and more guesses waste time.
Flake retry budget: at most 2 reruns via gh run rerun --failed for the same
suspected-flaky job before treating it as real. A test-pkg-js that fails all three times with
"connection refused" — the original run plus both reruns — is a genuine problem (container startup
regression, service crash at boot); switch to Phase 2.4 "real" investigation.
Escalate immediately (do not spend retry budget) when:
- The failure involves a secret or credential (never debug secrets autonomously)
- The workflow file itself is failing to parse (YAML error) — check with the user before editing workflow files
- The failure is on a master-only reporting job (
publish-docs,report-grc) that does not gate merges — surface but do not fix unless asked - The failure is on
report-codecov— it runs on every branch and can make the run appear failed in PR checks even when branch protection does not gate on it. Surface it; investigate only if the user asks, or if it reproduces across consecutive runs (a real upload or config regression rather than a transient) - CI is failing only on master after a merge — something slipped past review; surface immediately, never push an autonomous fix to master
- The same fix would require editing files outside the current branch's scope — stop and ask
What escalation looks like: surface (a) the failing job(s), (b) the root-cause hypothesis, (c) what has been tried, (d) why further attempts are not confidence-building.
Phase 5: When CI is Green
- Push to a feature branch without a PR → hand off to
open-pull-requestif the user wants one opened - Push to an open PR → surface the all-green state and stop. Merging is a developer decision unless explicitly delegated (see Safety Rules).
This report completes the CI check required by open-pull-request Phase 7. A PR may still
await scope approval, full relevant coverage, or cleanup under develop-feature; report those
remaining steps accurately. Include any unresolved findings from the Phase 1.2 self-review.
Safety Rules
- Never push directly to
masterormain— even for a trivial CI fix. All fixes go via the PR branch. - Never
gh workflow runorgh run cancelwithout explicit user permission — those affect shared CI state. - Never skip pre-commit hooks (
--no-verify) to make CI pass. A local hook that blocks a commit blocks CI too; fix the underlying issue. - Never
gh pr merge, and never add an--auto-mergeflag, unless the user explicitly says to merge. - Never edit
.github/workflows/*.yamlto silence a failure — a genuinely obsolete check is a separate conversation with the user. - Never autonomously re-run a failing job more than twice (the Phase 4 flake retry budget).
Quick Reference
| Situation | Command |
| Overall status (PR open) | gh pr checks --watch=false |
| Overall status (no PR) | gh run list --branch <branch> --limit 1 --json databaseId,status,conclusion,name |
| List failing jobs in a run | gh run view <run-id> --json jobs --jq '.jobs[] | select(.conclusion=="failure")' |
| Read only failed-step logs of one job | gh run view <run-id> --log-failed --job <job-id> |
| Narrow noisy logs | ... | tail -n 200 or ... | grep -E "FAIL|Error" | head -n 50 |
| Rerun failed jobs only (flake retry) | gh run rerun <run-id> --failed |
| Wait for in-progress run | Background timeout 40m gh pr checks <pr> --required --watch --interval 10 |
| CI Job | Local fix target |
generated-go | pnpm generate:go + follow-up commit |
lint-go | pnpm lint:go |
lint-proto | pnpm lint:proto |
lint-js | pnpm lint:ci |
test-go | a-novel test --type=go -y |
test-pkg | a-novel test --type=go -y |
test-pkg-js | a-novel test --type=pnpm -y |
build-js | pnpm -C pkg/js build:rest |
build-* (Go) | go build ./... |
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.

