Skip to content
Back to skills

Weekly Skill Refresh

ASecurity

Run the unattended weekly refresh of one client's agent-creator and client-config skills in CowboyLogic/ai-dev from a fresh cloud clone. Use when a routine names a client (claudecode, codex, copilot, opencode).

  • 4 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
ai-agentspythonrustgobashgitapisecuritydocumentation

Works with

  • cli
  • api
  • mcp

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned November 7, 2026

npx -y skills add CowboyLogic/ai-dev --skill weekly-skill-refresh --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Weekly Skill Refresh?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Weekly Skill Refresh
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/cowboylogic-weekly-skill-refresh/badge)](https://www.skillsdirectory.com/skills/cowboylogic-weekly-skill-refresh)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: weekly-skill-refresh
description: Run the unattended weekly refresh of one client's agent-creator and client-config skills in CowboyLogic/ai-dev from a fresh cloud clone. Use when a routine names a client (claudecode, codex, copilot, opencode).
---

# Weekly skill refresh

Unattended weekly refresh of one client's two skills against that client's latest stable
release. This is a repository maintenance skill, not an installable artifact. It runs in a
fresh cloud clone: no local worktrees, no `~/projects` paths, no `.venv`, no GraphQL, and no
way to delete remote branches.

**Parameter:** `client`, one of `claudecode`, `codex`, `copilot`, `opencode`. Use the row
below for everything client-specific; every other step is identical.

| client | Skills in scope | Tool and version source | `sources.json` |
|---|---|---|---|
| `claudecode` | `skills/agent-creator-claudecode`, `skills/client-config-claudecode` | npm `@anthropic-ai/claude-code` `latest` dist-tag and `anthropics/claude-code` releases | `skills/client-config-claudecode/assets/sources.json` |
| `codex` | `skills/agent-creator-codex`, `skills/client-config-codex` | `openai/codex` GitHub releases (tag `rust-v<version>`), stable only | `skills/client-config-codex/sources.json` |
| `copilot` | `skills/agent-creator-copilot`, `skills/client-config-copilotcli` | `github/copilot-cli` GitHub releases, stable only | `skills/client-config-copilotcli/sources.json` |
| `opencode` | `skills/agent-creator-opencode`, `skills/client-config-opencode` | `anomalyco/opencode`: V1 from GitHub releases, V2 from git tags (no releases); release notes are the repository `CHANGELOG.md` | `skills/client-config-opencode/sources.json` |

Branch name: `refresh/<client>`. This run owns that branch and nothing else.

## Rules that override this file

Read `AGENTS.md` first. It governs git, documentation and PR rules. Never commit or push
to `main` or `master`, never merge a PR, never bypass hooks, never `git add -A` or
`git add .`, and never edit `site/`. Put scratch files in `.agent-output/`. If anything
below conflicts with `AGENTS.md`, `AGENTS.md` wins, with one standing exception: the
maintainer (Micheal) pre-approved, for these scheduled refresh runs, the two outward
actions section 3 and 5 call for: posting the one tracking issue per client per run
(`AGENTS.md` "Planned work" asks for a draft and approval; the issue content here is
generated from `.github/ISSUE_TEMPLATE/weekly_maintenance.md` and contains nothing
private), and opening one **ready-for-review** (not draft) PR per client per run. The
approval is Micheal's instruction on 2026-11-01 in the project thread that created this
procedure, which required the issue-first, PR-every-run flow, and his answer "READY PR's".
It covers only that issue and that PR. It does not cover merging, any other issue
(including deferrals under section 6, which are reported, not posted), or any other PR.

## 1. Prepare

1. The clone may be shallow and single-branch, so a plain `git fetch origin <branch>` can
   update only `FETCH_HEAD`. Always fetch into explicit remote-tracking refs:
   `git fetch --unshallow origin 2>/dev/null || true`, then
   `git fetch origin +refs/heads/main:refs/remotes/origin/main`.
2. Set up tooling from the repo's own instructions (`AGENTS.md`, "Python environment"):

   ```bash
   uv venv --python 3.14
   source .venv/bin/activate
   uv pip install pyyaml mkdocs mkdocs-material mkdocs-callouts
   ```

   markdownlint runs through `npx --yes markdownlint-cli2 <changed files>` (config in
   `.markdownlint.json`). If it cannot be installed, say so in the PR; do not claim it passed.
3. Look for this client's unmerged work with GitHub MCP `list_pull_requests` (state `open`,
   head `CowboyLogic:refresh/<client>`, no base filter). Reset or force-push only after a
   successful and complete lookup: the call returned without error, you paged until no
   further page remained, and it returned zero open PRs for this head. On any error,
   truncated or ambiguous result, retry once, then stop and report; never treat a failed
   lookup as "no open PR". If an open PR targets a base other than `main`, do not continue
   or reset the branch: stop and report.
   - **Open PR exists:** continue it. `git fetch origin +refs/heads/refresh/<client>:refs/remotes/origin/refresh/<client>`
     and `git checkout -B refresh/<client> origin/refresh/<client>`. Take the issue number from the
     `Closes #<n>` line in the PR body. Open no new issue or PR this run.
   - **No open PR:** start fresh. Cloud sessions cannot delete remote branches, so reset
     instead: `git checkout -B refresh/<client> origin/main`. If `refresh/<client>` exists on
     origin (check with `git ls-remote --heads origin refresh/<client>`; if it does, fetch it
     with the same explicit refspec as above so `origin/refresh/<client>` exists), the first
     push is
     `git push --force-with-lease=refresh/<client>:<sha-you-fetched> -u origin refresh/<client>`,
     where the sha is `git rev-parse origin/refresh/<client>`. Force only here, only on this
     branch, only when no open PR exists. If the branch is not on origin, plain
     `git push -u origin refresh/<client>`.
4. Before the first edit, confirm `git rev-parse --abbrev-ref HEAD` is `refresh/<client>`.

## 2. Establish the basis

1. Find the latest **stable** release from the table's source. Skip alpha, beta, rc and
   other prereleases.
2. Find the basis recorded by the previous refresh in each skill's `README.md`, `SKILL.md`
   and `CHANGELOG.md` (agent-creator skills may have no `CHANGELOG.md`).
3. The window is the previous basis through the new version.

## 3. Open the tracking issue (every run, even if nothing changed)

Skip when step 1.3 found an open PR; use the issue it closes.

1. Read `.github/ISSUE_TEMPLATE/weekly_maintenance.md`, drop its frontmatter, and fill in
   every section from what you know now. Tick only what is true. In "Before starting", the
   worktree line is satisfied by this run's fresh clone; say so.
2. Create it with GitHub MCP `issue_write` (method `create`), title
   `[<skill 1>, <skill 2>] Weekly refresh against <Tool> <version>`, issue type
   `Maintenance`, labels `documentation` and `skill`. If the MCP tool cannot set the type,
   use `gh api -X POST repos/CowboyLogic/ai-dev/issues ... -f type=Maintenance`.
3. Keep the number. If the issue cannot be created, stop and report why.

## 4. Refresh the skills

1. Read both skills in full (`SKILL.md`, everything under `references/`, `README.md`,
   `CHANGELOG.md` where present) and the sources in the client's `sources.json`.
2. Check the vendor's release notes for the window and the published documentation for each
   source. Use authoritative sources only.
3. Make targeted edits. Do not rewrite sections that are still accurate.
4. Keep every change verifiable. If a claim cannot be checked against a source, do not make
   it. Label a claim that rests on release notes alone. Record conflicts between sources
   instead of resolving them.
5. Update the version basis and verification date in each skill's `README.md` and
   `SKILL.md`. Add a `CHANGELOG.md` entry per skill that has one; where a skill has none
   (the agent-creator skills), do not create one: record the change in the PR and the
   client-config entry. A refresh with no content change still gets the entry, saying what
   was verified and that no content changed.
6. Update the matching `docs/` pages per `AGENTS.md` "Artifact and documentation
   synchronization". Docs link to the skill folder and never copy its content.
7. Run, with the venv active, and fix every failure:

   ```bash
   python scripts/validate_artifact_sync.py
   mkdocs build --clean --strict
   npx --yes markdownlint-cli2 <changed .md files>
   ```

8. If `npm` blocks installing a version this new (release-age guard), do not override it.
   Verify from the release docs and source, and say in the README and the PR that the
   binary was not run.

## 5. Record the outcome

Every run produces a PR, because the verification date and basis change every run.

1. Commit in logical units, conventional style (`docs(skills): ...`), staging exact paths.
2. Push `refresh/<client>` per step 1.3. Otherwise never force-push.
3. Continuing an open PR: the push updates it. Comment on the PR with what this run added,
   then go to section 6. Otherwise open the PR with GitHub MCP `create_pull_request`
   (head `refresh/<client>`, base `main`), body filled from
   `.github/PULL_REQUEST_TEMPLATE/weekly_maintenance.md`, with `Closes #<issue>`. Title:
   `docs(skills): weekly <Tool> skills refresh against <Tool> <version> (<YYYY-MM-DD>)`.
   The body is the maintainer's review surface, since the maintainer reads it before
   merging. It must summarize, in plain terms: what changed per skill and why (with the
   source for each claim), what was verified with no change, what was deliberately left out
   or could not be verified, and which claims rest on release notes alone. A date-only
   refresh says so under "Changes made" and lists the sources checked. Begin the
   body with any attribution block the routine or session context requires.
4. Comment on the issue with the PR link. Leave it open; it closes when the PR merges.
5. Only if there is no diff at all (dates already match today), skip the PR: comment on the
   issue with the basis and sources checked, then close it as completed.

## 6. Answer the review

Opening the PR starts the review; it is not the end. Copilot reviews once and does not
re-review. Codex reviews code and security and re-reviews after each push. Work in rounds
and stop after 3 rounds in total. Wait at most 10 minutes in total for any one review; if
it has not landed, stop waiting, report the PR link, and say the review is pending. Never
call the PR clean in that case.

GraphQL is blocked in cloud. Use GitHub MCP `pull_request_read` (methods for review
comments, reviews and review threads) to read; `add_reply_to_pull_request_comment` to
reply; `resolve_review_thread` to resolve. REST via `gh api repos/CowboyLogic/ai-dev/pulls/<n>/...`
is the fallback. Page through every result.

Each round is one pass, with one push at the end:

1. Wait 2 to 3 minutes after the PR opens or after a push, then read all reviews: inline
   threads and findings that appear only in a review summary.
2. Classify every finding before changing anything, checking each against the code:
   - **Valid:** fix it in its own commit, with the validator or test that covers it.
     Findings with one cause are one fix and one commit.
   - **Invalid or inapplicable:** no change; note what you checked.
   - **Valid but out of scope:** no change; note why. Follow `AGENTS.md` "Planned work"
     (draft the issue in `.agent-output/`, and because no human is present to approve,
     report it as a deferral in the final report instead of posting it; do not resolve that
     thread until an issue exists, and say so).
3. Run the applicable validators on the final tree, then push once. Never amend or rebase
   reviewed commits. Never push while a review is pending or while findings from the same
   round are unaddressed.
4. Reply on every thread (name the fix commit, or give the reason), then resolve it,
   except as noted for deferrals. Check resolution state, not comment presence.
5. If Codex reviews the push with new findings, that is the next round, up to 3 total.
   After the third round's push, check the resulting review but do not respond to a fourth;
   report its findings or pending status for human direction.

## 7. Merge-readiness bar

Before reporting, verify on the current PR head (`pull_request_read` get and
status methods; `gh api repos/CowboyLogic/ai-dev/pulls/<n>` as fallback):

- Not a draft unless the routine said draft; `mergeable` is true and `mergeable_state` is
  `clean`; required checks pass. Unknown, pending or failing is unverified, not clean.
- **Rebaseable onto `main` with no conflicts.** `git fetch origin +refs/heads/main:refs/remotes/origin/main` and check
  `git merge-tree --write-tree origin/main HEAD` exits 0. If `main` moved and conflicts,
  merge `origin/main` into `refresh/<client>` (never rebase a reviewed branch), resolve,
  rerun the validators, push, and repeat sections 6 and 7 on the new head. Pushes count
  toward the 3-round cap.
- **No unresolved review threads from any reviewer**, outdated ones included, every page.

If a condition cannot be met within this procedure, report the exact blocker and the PR
link as unfinished. Never claim mergeable or ready while anything is unresolved or
unverified. Never merge.

## 8. Final report

Also post this as a final comment on the PR (the maintainer reads the PR, not the session),
and update the PR body if the review rounds changed its content.
State: client and version, issue and PR links, whether the PR is draft or ready, rounds
used, fixes (with commits), refutations, deferrals, and the merge-readiness result with
anything unverified.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.