원클릭으로
maintainer-orchestrator
Delegated maintainer ops: decision-ready PRs, worker monitoring, queue cleanup, releases.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Delegated maintainer ops: decision-ready PRs, worker monitoring, queue cleanup, releases.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Pre-commit/ship code review: Codex default; optional Claude, Pi, Droid, Copilot, Cursor, or OpenCode.
Install, repair, or diagnose App Store Connect version/build-number guards for Xcode Cloud iOS apps. Triggers: version guard, release hooks, Xcode Cloud rejection, MARKETING_VERSION, build number collision.
Things 3 CLI for reading the local Things database and creating/updating tasks/projects via the Things URL scheme. Use when you need to list, search, or modify Things tasks, projects, areas, or tags from the terminal (deletes use AppleScript).
Fetch secrets and env vars from 1Password via the `op` CLI. Primary path is a non-interactive service-account token (no prompts); Touch ID is the fallback. Use whenever a command needs an API key, token, password, or `.env` value — read it from 1Password instead of hardcoding, printing, or asking the user to paste it. Triggers: op, op read, op run, op inject, op://, 1Password, fetch a secret, get an API key, inject env vars.
Operate the Post Queue repo command surface effectively. Use when an agent needs to run local dev servers, local Supabase/Drizzle workflows, scheduler ticks or loops, cron-runner checks, tests, lint, typecheck, or database migrations in this repo.
Add a redacted agent transcript section to GitHub PR or issue bodies during agent-created PR/issue workflows.
| name | maintainer-orchestrator |
| description | Delegated maintainer ops: decision-ready PRs, worker monitoring, queue cleanup, releases. |
Coordinate repository work through completion. This is a control-plane skill: inspect, delegate, monitor, ask decisions, and report. Put substantial repository investigation, implementation, review, live proof, landing, and release execution in repository worker threads.
The orchestration logic below is the same regardless of backend. Only how the root session launches and how workers are spawned differs.
Codex (primary, unchanged). This skill is launched from agents/openai.yaml as a Codex agent, and each worker is a separate Codex chat/thread the root session spawns (<Project>: <task>), renames, polls (~5 min), and steers. Workers do not subdelegate. This path already works — the rest of this document describes it; do not alter it for the Claude adaptation below.
Claude Code (adaptation). When this skill runs inside Claude Code, the main session is the root orchestrator. Map the Codex worker concepts onto native primitives — nothing about the Codex path changes:
| Concept | Codex (as today) | Claude Code equivalent |
|---|---|---|
| Spawn a worker | New thread, paste the worker brief | Agent tool with agents/repo-worker.md as the prompt (run_in_background: true; isolation: "worktree" when lanes touch files concurrently) |
| Rename / relabel | Rename thread <Project>: <task> | Set the agent description per task |
| Continue a worker | Reuse the same thread | SendMessage to the same agent (context persists) — don't respawn |
| Monitor | ~5-minute poll of thread state | Background-agent completion notifications + a ScheduleWakeup heartbeat backstop; avoid tight polling |
| Subdelegation | Workers must NOT subdelegate | Subagents MAY spawn their own subagents to finish their lane; they still must not manage other lanes or the control plane |
agents/repo-worker.md is the self-contained worker brief for the Claude path (a subagent doesn't have this SKILL.md in context, so it packages the contract, permissions, and live-proof gate into one prompt). The Codex path keeps delegating exactly as it does today. Everything below is backend-agnostic unless it names Codex or Claude Code explicitly.
ossianhempel as in scope unless contribution history says otherwise.github-project-triage with RepoBar as the default discovery and queue-map path. Start from RepoBar for repository scope, open issue/PR counts, CI/activity/release/local-checkout signals, and pinned/suppressed filtering. Use gh only as the authoritative detail/mutation fallback for selected items: full issue/PR bodies and comments, diffs, review decisions, unresolved review threads, mergeability, workflow logs, reruns, comments, PR edits, closes, and merges.Autonomous: clear fit, reproducible, bounded implementation, and usable verification path.Needs owner: product choice, security/privacy decision, unavailable credentials/access, unavailable live proof, or destructive/irreversible choice.Ignored by owner: an explicitly named item the owner says must not affect current work or release gating.Needs owner and do not create a PR. Durable operational docs/prompts/skills remain valid PR content when they encode actual maintainer behavior.<Project>: <short current task>. Keep work for one repository in its existing thread. Do not set or request a custom model; omit model selection and inherit the platform default.Do not treat ordinary draft, stale, difficult, or platform-specific items as ignored. Only an explicit owner instruction can create an ignored-item exception. Keep ignored items open and visible; do not close, edit, or merge them unless separately requested.
Do not ask the owner to decide from an unprepared issue or rough contributor branch.
Needs owner with the evidence needed for an owner close/keep decision.The normal owner interaction should be one of: land the prepared PR, delete/close it, provide one exact access step, or choose between clearly documented alternatives.
Never ask for land/delete, approval, access, waiver, or a product choice with only a URL or status label.
Immediately before asking, refresh the item and worker state. Do not repeat a question the owner already answered, and do not present an item as decision-ready when it has become conflicted, stale, red, or otherwise moved behind an autonomous repair gate.
Every owner decision request must include:
When several decisions are grouped, give each item its own brief. Keep the recommendation opinionated; do not offload technical analysis to the owner. If autonomous work remains, do that work first and report the item as active rather than asking for a premature decision.
Assume another person or agent may have steered every worker since the last poll.
Before sending any worker message:
gh pr view alone for review comments; query review threads explicitly through GraphQL or the GitHub API.Intervene only when evidence shows one of:
Do not restate the task, add speculative requirements, or raise the proof bar mid-flight. Apply the live-proof gate from initial delegation; never downgrade missing live proof to a release-only blocker. Prefer one concise question over prescriptive steering when current intent is ambiguous.
Never interrupt, archive, rename, duplicate, or replace a worker without first reading its current state. For a suspected duplicate, read both threads; if either has unique progress, edits, or an active turn, leave it alone and ask the owner before changing thread state.
<Project>: <short current task>.~/oss-orchestrator.md; workers do not edit it.An idle or completed repository thread must not remain a polling-only lane. After reading its latest state, inspect that repository's current queue, CI, latest release, package metadata, and unreleased changelog. Then do exactly one:
Do not keep completed threads merely to satisfy a lane count. A monitored repository should have active autonomous work, a pending owner question, an active release, or a documented reason no release is warranted.
Dependency freshness is a backstop, not higher priority than real queue or release work.
Treat triage, monitoring, implementation, public mutation, and release as separate permissions.
Record the granted permissions in each worker prompt. Without the required permission, stop at the last authorized boundary and report the exact next action.
Maintainer credentials currently live in .env files (per-project) or exported environment variables. Before reporting a credential blocker:
.env (or .env.local) and read only the exact key needed via the project's normal loader. Never print secret values or dump the whole file..env provides the key.If 1Password (CLI op or service accounts) is set up later, prefer it over plaintext .env: read the service-specific auth skill, use scoped op run/op inject, never broadly enumerate or print secrets, and fall back to .env only when 1Password access is unavailable.
Every delegated implementation thread, within its explicit authorization, must:
needs-human threads open with the exact decision required.autoreview until no accepted/actionable findings remain;--ff-only, and verify a clean worktree.Worker completion reports should be terse when the PR is clean. Use one or two lines with the PR URL, proof type, green checks, review-thread state, and any blocker. Do not paste full command lists, branch/worktree details, or long proof descriptions unless something failed, is blocked, or needs owner action; the orchestrator can inspect GitHub and logs for details.
Prefer repairing the contributor PR. Preserve contributor credit and follow the workspace PR rules. When landing is not yet authorized, stop only after the branch is pushed, the PR targets the repository's selected integration branch, the PR is mergeable, required CI is green, live proof is recorded, and the exact owner decision is stated.
Before creating or judging any PR, apply github-project-triage's Integration
Branch Gate. Do not assume main is the right base merely because it is the
GitHub default branch. Repositories may use develop as the staging/development
branch and reserve main for production releases; in those repos, workers must
create worktrees from develop, open PRs against develop, return to clean
develop, and report any PR that accidentally targets main as a readiness
blocker until it is retargeted or intentionally approved.
(Codex workers must not subdelegate; Claude Code subagents may spawn their own subagents to complete this contract.)
Live proof is a pre-land requirement, not optional polish.
peekaboo skill for screenshots / UI proof; for web UI, use the agent-browser skill.ce-demo-reel upload pattern when available: temporary Litterbox preview is fine for human review, but final PR proof must render inline in the PR body or proof comment, not as a bare URL. Use permanent public hosting such as configured R2 or Catbox (files.catbox.moe) embedded with Markdown image syntax for screenshots/GIFs. For video reels, GitHub-hosted uploaded video attachments are acceptable when GitHub renders them inline; externally hosted video links that GitHub does not render inline are not sufficient proof. Verify the GitHub PR renders the artifact inline before calling proof complete.raw.githubusercontent.com image URLs as final PR proof. They can 404 after branch/file cleanup and are not reliable for private repositories; upload the artifact to permanent public hosting or report the upload blocker instead.Record live evidence or the owner's explicit waiver in the landing proof comment.
Compute the effective queue immediately before release:
effective issues = open issues - explicitly ignored issues
effective PRs = open PRs - explicitly ignored PRs
Release only when all are true:
Recheck the GitHub queue and CI immediately before tagging or publishing. Abort if either gate changes.
Never silently exclude an item. In release reporting, list ignored items and the owner instruction that exempted them.
Use the repository's release docs and matching skill:
npm;release-mac-app;release-ios-app;Before release:
After publishing, verify the actual release:
Then open the next patch Unreleased section. Commit and push the closeout only when those mutations are authorized; otherwise leave the verified local closeout ready and report the exact permission needed. After an authorized push, pull --ff-only and finish on the selected release branch with a clean worktree.
Keep one compact cross-repo ledger:
Active: repo, item URL, worker, current phase.Intervened: exact risk and instruction sent.Needs owner: exact decision/access required; no vague "needs review".Ignored: exact item and owner-granted exception.Released: version, tag/registry verification, closeout commit.Ready next: effective queue empty, CI green, recommended patch/minor version and rationale.For recurring heartbeat reports, prefer delta-only output. Mention only newly opened
or newly readied PRs, newly started/closed workers, new blockers, and changed
Needs owner state. Do not repeat unchanged clean PRs, unchanged proof details, or
routine poll results unless they are needed to explain an action. A ready PR can
be one line: <repo>: <PR URL> ready; proof <type>; checks green; threads clear.
An active worker can be one line: <repo>: <issue URL> active in <phase>.
Omit archived and owner-suppressed repositories entirely. Do not list them as ignored, blocked, stale, or available work.
Whenever mentioning an issue or PR in any owner report, decision question, worker message, or status update, print its full canonical clickable URL. Never use only a repository-local number such as #123; include https://github.com/OWNER/REPO/issues/123 or https://github.com/OWNER/REPO/pull/123.
For Needs owner, use the Owner Decision Brief format. Never emit a bare URL plus land/delete.
Report meaningful changes, not routine polling. Maintain a heartbeat automation when the user asks to keep monitoring.