Contributor-First PR Merge
HKUDS/OpenHarness
Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.
Monitor GitHub pull requests through a subagent-based loop that watches CI checks, review comments, PR comments, review state, merge conflicts, and branch freshness.
$ npx skills add elastic/terraform-provider-elasticstack --skill pr-monitoring-loop -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install elastic/terraform-provider-elasticstack pr-monitoring-loop --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/elastic/terraform-provider-elasticstack.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/pr-monitoring-loop .claude/skills/pr-monitoring-loop && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pr-monitoring-loop" agent skill from https://github.com/elastic/terraform-provider-elasticstack/tree/main/.agents/skills/pr-monitoring-loop into .claude/skills/pr-monitoring-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-monitoring-loop", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/elastic/terraform-provider-elasticstack/tree/main/.agents/skills/pr-monitoring-loopType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add elastic/terraform-provider-elasticstack --skill pr-monitoring-loop -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install elastic/terraform-provider-elasticstack pr-monitoring-loop --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/elastic/terraform-provider-elasticstack.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/pr-monitoring-loop .agents/skills/pr-monitoring-loop && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pr-monitoring-loop" agent skill from https://github.com/elastic/terraform-provider-elasticstack/tree/main/.agents/skills/pr-monitoring-loop into .agents/skills/pr-monitoring-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-monitoring-loop", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add elastic/terraform-provider-elasticstack --skill pr-monitoring-loop -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install elastic/terraform-provider-elasticstack pr-monitoring-loop --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/elastic/terraform-provider-elasticstack.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/pr-monitoring-loop .cursor/skills/pr-monitoring-loop && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pr-monitoring-loop" agent skill from https://github.com/elastic/terraform-provider-elasticstack/tree/main/.agents/skills/pr-monitoring-loop into .cursor/skills/pr-monitoring-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-monitoring-loop", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/elastic/terraform-provider-elasticstack.git --path .agents/skills/pr-monitoring-loop--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add elastic/terraform-provider-elasticstack --skill pr-monitoring-loop -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install elastic/terraform-provider-elasticstack pr-monitoring-loop --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/elastic/terraform-provider-elasticstack.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/pr-monitoring-loop .gemini/skills/pr-monitoring-loop && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pr-monitoring-loop" agent skill from https://github.com/elastic/terraform-provider-elasticstack/tree/main/.agents/skills/pr-monitoring-loop into .gemini/skills/pr-monitoring-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-monitoring-loop", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install elastic/terraform-provider-elasticstack pr-monitoring-loopInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add elastic/terraform-provider-elasticstack --skill pr-monitoring-loop -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/elastic/terraform-provider-elasticstack.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/pr-monitoring-loop .github/skills/pr-monitoring-loop && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pr-monitoring-loop" agent skill from https://github.com/elastic/terraform-provider-elasticstack/tree/main/.agents/skills/pr-monitoring-loop into .github/skills/pr-monitoring-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-monitoring-loop", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add elastic/terraform-provider-elasticstack --skill pr-monitoring-loop -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install elastic/terraform-provider-elasticstack pr-monitoring-loop --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/elastic/terraform-provider-elasticstack.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/pr-monitoring-loop .opencode/skills/pr-monitoring-loop && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pr-monitoring-loop" agent skill from https://github.com/elastic/terraform-provider-elasticstack/tree/main/.agents/skills/pr-monitoring-loop into .opencode/skills/pr-monitoring-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-monitoring-loop", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pr-monitoring-loopMonitor GitHub pull requests through a subagent-based loop that watches CI checks, review comments, PR comments, review state, merge conflicts, and branch freshness.
PR Monitoring Loop is an agent skill from elastic/terraform-provider-elasticstack, published by the product's own GitHub organization. Monitor GitHub pull requests through a subagent-based loop that watches CI checks, review comments, PR comments, review state, merge conflicts, and branch freshness. Use when a workflow reaches PR monitoring, CI polling, review feedback handling, or asks to keep a PR merge-ready.
Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts (for example `scripts/check-pr-state.py`, `scripts/tests/__init__.py` and `scripts/tests/test_check_pr_state.py`). Compatibility notes: Requires git, GitHub CLI, and permission to push fixes to the PR branch.
It sits in Development, covering Git workflow, Pull requests and Subagents. It works with GitHub and Git. The repository describes itself as: Terraform provider for Elastic Stack. The licence is MIT.
8 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit a9de7a2. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 4 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
ghpythonFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GITHUB_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Requires git, GitHub CLI, and permission to push fixes to the PR branch.
From compatibility in the SKILL.md frontmatter.
PR Monitoring Loop loads about 4.1k tokens when it runs. Until then it costs about 75 tokens; SKILL.md has 1,664 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from elastic/terraform-provider-elasticstack at commit a9de7a2, republished under its MIT licence (© elastic). 1,664 words, ~4,078 tokens.
.claude/skills/pr-monitoring-loop/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Run a reusable PR monitoring loop while keeping the main agent's context small.
Input: A PR number or URL, plus any workflow-specific readiness criteria such as required labels, required approving bot, or timeout rules.
The state file is optional. If you do not pass --state-file, the script auto-creates one at .agents/skills/pr-monitoring-loop/scripts/state/.pr-monitor-<pr>.json (gitignored) on first run and reuses it on every subsequent call for the same PR. You can call the script directly with just a PR number and "new vs old" detection still works across invocations. Override --state-file <path> only when you need an isolated state file (for example, parallel watchers on different branches but the same PR number, or tests). Pass --no-state to disable persistence entirely (every comment will be reported as new every poll).
verify-openspec behavior is opt-in. Do not add the verify-openspec label, wait for a verify approval review, or apply any OpenSpec-specific completion rule unless the caller explicitly asks for that behavior.
.agents/skills/pr-monitoring-loop/scripts/state/.pr-monitor-<pr>.json (gitignored) by default. Pass --state-file <path> only if you need isolation. Do NOT put state under .git/ — this repo uses git worktrees, where .git is a file pointing at a worktree-specific git dir, which would fragment state across worktrees watching the same PR.scripts/check-pr-state.py --state-file <path>. The state file persists "seen" IDs and lastPolledAt so a fresh subagent can still tell new feedback from old.summary.new* fields, not totals)summary.reviews.effectiveDecision == "CHANGES_REQUESTED" (a later APPROVED supersedes an earlier CHANGES_REQUESTED)--state-file path so seen IDs persist.When entering PR monitoring:
.agents/skills/pr-monitoring-loop/scripts/state/.pr-monitor-<pr>.json, so a fresh subagent invoking the script with only a PR number still sees previously seen IDs. Pass --state-file <path> explicitly to every subagent only when you need an isolated state file (e.g., parallel watchers, tests). Do NOT put state under .git/ — see the worktree note above.--state-fileTell the watcher subagent:
Monitor PR <pr> using:
.agents/skills/pr-monitoring-loop/scripts/check-pr-state.py <pr>
(The script auto-creates and reuses a state file at
`.agents/skills/pr-monitoring-loop/scripts/state/.pr-monitor-<pr>.json` so "new since last poll"
detection survives across fresh subagents. Only pass `--state-file <path>` if the main agent
explicitly asked you to use a non-default state file.)
Drive every decision off the script's focused output. In particular:
- New work appears as `comments.newIssueComments`, `comments.newReviewComments`,
`threads.unresolvedNew`, `threads.unresolvedUpdatedSinceHead`, and
`reviews.newReviewIds`. Old totals stay under `comments.totalIssueComments` / `comments.totalReviewComments` for reference but MUST NOT
drive the actionable decision.
- Review state is `reviews.effectiveDecision` (latest review per reviewer; a later APPROVED
supersedes an earlier CHANGES_REQUESTED).
- verify-openspec state is `verifyOpenspec.requiresOpenspecVerification`. When `true`, apply the `verify-openspec` label. When `false`, do not touch the label.
- CI is `checks` (which prefers commit-pinned data over `gh pr checks` rollup).
Poll until one of these happens:
- the PR satisfies the provided success criteria
- a CI check fails (`failed_checks` in `summary.actionable`)
- there is a new actionable PR comment, review comment, unresolved review thread, or
CHANGES_REQUESTED review (any of `issue_comments`, `review_comments`, `unresolved_review_threads`,
`changes_requested` in `summary.actionable`)
- the PR has a merge conflict or stale branch state
- the loop is blocked or has timed out
You may fix and push changes yourself when you judge the fix simple, including mechanical lint,
formatting, generated artifacts, obvious test expectation updates, small typo fixes, or other
low-context changes. After pushing, perform the thread-resolution protocol (see "Thread
resolution" below) for every thread your fix addresses, then continue watching the new PR head.
Return work to the main agent when the fix is non-simple, ambiguous, risky, spans multiple
concerns, requires product/API judgment, repeats after an attempted fix, or needs user input.
Print the entire script output JSON before deciding. In your final result include:
- status: `ready`, `fixed-and-continued`, `delegate`, `blocked`, or `timeout`
- PR URL and head SHA
- actionable item summary
- evidence from `check-pr-state.py` (paste the relevant excerpt, e.g. `actionable`, `checks.failedChecks`, `threadDetails`)
- counts of seen vs new IDs you observed
- fixes you committed and pushed, threads you replied to and resolved (with thread ids)
- recommended delegate scope when status is `delegate`Prefer --watch over hand-rolled sleep loops:
--watch --interval 60.--watch --interval 300.--max-duration so the subagent can't run unbounded; size it to the expected window.--watch exits with code 0 on the first actionable tick (and prints a {"final": true, "outcome": "actionable", ...} line), 124 on timeout, and 2 on a transient gh failure that survived retries. Each tick is one NDJSON line; the watcher should stream and react to those.
After every push, restart the watch cycle for the new PR head SHA. The state file is updated automatically each tick.
Use:
.agents/skills/pr-monitoring-loop/scripts/check-pr-state.py <pr>The script auto-creates a state file at the default path on first run; pass --state-file <path> only when you need an isolated state file, or --no-state to disable persistence entirely.
When invoked without --full-payload (the default) the script returns a focused JSON payload containing only actionable decision data. The raw data arrays (prChecks, commitCheckRuns, commitStatuses, reviews, issue_comments, review_comments, review_threads, issue_events, merge_conflicts) are not included in the default output; use --full-payload when you need them.
The focused output contains:
pr: number, url, title, headRefName, headRefOid, mergeable, mergeStateStatus, labelschecks: source, headSha, total, failed, pending, passed, failedChecks[] with {name, url}, pendingNamescomments: totalIssueComments, totalReviewComments, newIssueCommentIds, newReviewCommentIds, newIssueComments[] with {id, author, body}, newReviewComments[] with {id, author, body}threads: unresolved, unresolvedNew, unresolvedUpdatedSinceHead, unresolvedThreadIds, unresolvedNewThreadIdsthreadDetails: keyed by thread id, includes path, line, resolved, outdated, comments[] with {author, body, databaseId}reviews: total, newReviewIds, effectiveDecision, latestByReviewer, newReviews[] with {author, state, id}verifyOpenspec: runState, requiresOpenspecVerificationmerge: blocked, hasConflicts, conflictFiles, conflictAnalysisAvailable, mergeable, mergeStateStatusactionable: list of string signalshasActionable: boolheadPushedRecently: boolTop-level fields the watcher consumes (there is no separate summary dict; the root object is the summary):
actionable (list of strings) and hasActionable (bool)checks.{source, total, failed, pending, passed, failedChecks[], pendingNames} — failedChecks[] has {name, url} for log lookup; source is commit-pinned when canonical, pr-checks when falling backcomments.{totalIssueComments, totalReviewComments, newIssueComments, newReviewComments, newIssueCommentIds, newReviewCommentIds} — newIssueComments[] and newReviewComments[] include {id, author, body} when there is new contentthreads.{unresolved, unresolvedNew, unresolvedUpdatedSinceHead, unresolvedThreadIds, unresolvedNewThreadIds}threadDetails.{<threadId>}.comments[].databaseId — the REST id needed for in_reply_to in the thread-resolution protocolreviews.{total, newReviewIds, latestByReviewer, effectiveDecision, verifyOpenspec}verifyOpenspec.{runState, requiresOpenspecVerification} — use requiresOpenspecVerification as the single trigger for applying the labelmerge.{blocked, hasConflicts, conflictFiles, ...}headPushedRecently is true when the head SHA changed since the last poll recorded in the state fileRun the test suite with:
python -m pytest .agents/skills/pr-monitoring-loop/scripts/testsGitHub does not auto-resolve a review thread when you push a fix. The script therefore exposes two complementary numbers:
summary.threads.unresolvedNew — threads not yet recorded in the state file (genuinely new feedback).summary.threads.unresolvedUpdatedSinceHead — threads where a comment was posted after the recorded lastPolledAt (typically a follow-up reply on a thread you already saw).summary.actionable lists unresolved_review_threads only when one of these is non-zero. A thread the delegate addressed and resolved (see "Thread resolution") drops out of unresolved entirely; a thread the delegate addressed but did NOT resolve will keep firing, which is the bug we are explicitly avoiding.
When a delegate pushes a fix that addresses a review thread, it MUST do BOTH of the following, in order:
Post a reply on the thread citing the addressing commit SHA and a one-line summary of what changed. Use the REST databaseId of the FIRST comment in the thread as in_reply_to:
gh api repos/<owner>/<repo>/pulls/<pr>/comments \
-f body="Addressed in <sha>: <one-line summary>" \
-F in_reply_to=<root_comment.databaseId>In the focused output, thread data is at threadDetails.<thread-id>.comments[]. Each comment has:
databaseId — the REST id you need for in_reply_tothreadDetails dict (e.g. threadDetails["MIDAC..."]) which you need for the resolve mutation.Resolve the thread via GraphQL, using the thread's GraphQL node id (review_threads[].id):
gh api graphql \
-f query='mutation($id:ID!){resolveReviewThread(input:{threadId:$id}){thread{isResolved}}}' \
-f id=<thread.id>A bare resolve without the reply is forbidden — the reply is what makes the resolution auditable for the human reviewer and distinguishable from "silently closed". Without resolution, unresolvedNew drift makes the loop indistinguishable from a fresh request and the watcher will keep delegating the same item.
Do NOT resolve threads the delegate did not address — for example, a thread the human is actively discussing or a thread whose feedback was deliberately not applied. When in doubt, leave unresolved and delegate to the main agent.
Only when the caller explicitly requires verify-openspec approval:
Read verifyOpenspec.runState and verifyOpenspec.requiresOpenspecVerification. The runState values are:
none — no label and no review for this PRpending-pickup — verify-openspec label is currently applied but the workflow has not startedin-progress — workflow has picked up the label and removed it, but no review has arrived yetapproved — the verify-openspec workflow submitted APPROVED. Approvals are permanent; they do not go stale.changes-requested — the verify-openspec workflow submitted CHANGES_REQUESTED; fix needed first.The verify-openspec workflow runs as github-actions[bot] (the standard GITHUB_TOKEN identity), not as a dedicated verify-openspec[bot] user. The script identifies its reviews by the body containing OpenSpec verify or Verification Report so other workflows that also post as github-actions[bot] are not confused with it.
Label state clarification — the verify-openspec workflow REMOVES its own label as soon as it picks up the PR. Therefore label absence on pr.labels is NOT a signal that verify "was never requested". Always read verifyOpenspec.runState, never pr.labels, when deciding whether to re-trigger.
Apply the label when requiresOpenspecVerification is true. This boolean is computed by the script and encodes every guardrail: no label if already approved, already pending, checks failing/pending, or any actionable item exists.
End successfully only when verifyOpenspec.runState == "approved" AND checks.failed == 0. Do not treat pr.reviewDecision == "APPROVED" or a green verify workflow check as equivalent.
Stop with timeout if runState does not transition to "approved" within the caller's --max-duration.
The script retries transient gh failures once with backoff, then exits with code 2 and prints a JSON body containing "transient": true. The watcher MUST treat exit code 2 as "retry on next tick", NOT as blocked. Only escalate to blocked when transient failures persist across multiple ticks.
--state-file.verify-openspec label when requiresOpenspecVerification is false.© elastic, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (scripts) in .agents/skills/pr-monitoring-loop of elastic/terraform-provider-elasticstack.
Open the folder on GitHubat commit a9de7a2
PR Monitoring Loop next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| PR Monitoring Loop this skillelastic/terraform-provider-elasticstack | 210 | — | ~4.1k | Automated safety check: Pass | MIT | |
| Contributor-First PR MergeHKUDS/OpenHarness | 16k | 1 repos | ~847 | Automated safety check: Pass | MIT | |
| Create Pull Requestcline/cline | 70k | 1 repos | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| Create Pull Request with Work Item IDmakeplane/plane | 61k | — | ~824 | Automated safety check: Pass | AGPL-3.0 | |
| Creating Description For Gh PRredis/jedis | 12k | — | ~838 | Automated safety check: Pass | MIT | |
| Pascal Editor PR Openerpascalorg/editor | 25k | — | ~619 | Automated safety check: Pass | MIT |
HKUDS/OpenHarness
Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.
cline/cline
Opens a GitHub pull request from your current branch with the gh CLI, after reviewing the commits and diff and gathering the details the PR needs.
makeplane/plane
Opens a pull request for the current branch using the repo's template, a work item ID in the title and a description filled in from the actual diff.
redis/jedis
Generate a clear, concise GitHub PR title and description from the diff between two local git branches, and save it to prDescription.md in the repo root.
pascalorg/editor
Opens or refreshes a pull request on pascalorg/editor from the current branch, describing only what the branch's commits and diff actually contain.
remix-run/react-router
Packages finished React Router work into a draft pull request: branch, commit, push, a written PR body and the right GitHub labels.
elastic/terraform-provider-elasticstack
Enter explore mode - a thinking partner for exploring ideas, investigating problems, and clarifying requirements.
elastic/terraform-provider-elasticstack
Implement tasks from an OpenSpec change. An agent skill from elastic/terraform-provider-elasticstack.
elastic/terraform-provider-elasticstack
Archive a completed change in the experimental workflow. An agent skill from elastic/terraform-provider-elasticstack.
elastic/terraform-provider-elasticstack
MANDATORY skill that activates whenever the OpenSpec proposal phase begins.
elastic/terraform-provider-elasticstack
Propose a new change with all artifacts generated in one step.
elastic/terraform-provider-elasticstack
MANDATORY skill that activates whenever the OpenSpec specification phase begins.
Categories
Monitor GitHub pull requests through a subagent-based loop that watches CI checks, review comments, PR comments, review state, merge conflicts, and branch freshness. PR Monitoring Loop is an agent skill from elastic/terraform-provider-elasticstack, published by the product's own GitHub organization. Monitor GitHub pull requests through a subagent-based loop that watches CI checks, review comments, PR comments, review state, merge conflicts, and branch freshness.
PR Monitoring Loop fits situations like: A workflow reaches PR monitoring; review feedback handling; asks to keep a PR merge-ready.
Run `npx skills add elastic/terraform-provider-elasticstack --skill pr-monitoring-loop -a claude-code`. Or copy the skill folder (.agents/skills/pr-monitoring-loop in elastic/terraform-provider-elasticstack) into .claude/skills/pr-monitoring-loop in your project. Claude Code loads it when a task matches its description.
Run `npx skills add elastic/terraform-provider-elasticstack --skill pr-monitoring-loop -a codex`. Or copy the skill folder (.agents/skills/pr-monitoring-loop in elastic/terraform-provider-elasticstack) into .agents/skills/pr-monitoring-loop in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add elastic/terraform-provider-elasticstack --skill pr-monitoring-loop -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pr-monitoring-loop, .gemini/skills/pr-monitoring-loop, .github/skills/pr-monitoring-loop and .opencode/skills/pr-monitoring-loop in your project.
Going by SKILL.md and its folder, PR Monitoring Loop needs Python for the scripts in its folder, the command-line tools its instructions call (gh and python) and credentials named GITHUB_TOKEN. Our summary lists: Python 3. Compatibility (from SKILL.md): Requires git, GitHub CLI, and permission to push fixes to the PR branch..
SKILL.md contains no URLs. Its commands use gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
PR Monitoring Loop is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.1k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with PR Monitoring Loop: Contributor-First PR Merge (HKUDS/OpenHarness, 16k stars), Create Pull Request (cline/cline, 70k stars), Create Pull Request with Work Item ID (makeplane/plane, 61k stars) and Creating Description For Gh PR (redis/jedis, 12k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
elastic (a GitHub organization, an official publisher) maintains it in elastic/terraform-provider-elasticstack, which has 210 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 11, 2026.
Source: elastic/terraform-provider-elasticstack on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.