pv-migrate is a command-line tool and kubectl plugin that moves or backs up data stored in Kubernetes PersistentVolumeClaims, which are Kubernetes objects connected to persistent storage. It is for operators who need to transfer claim data between namespaces, clusters, or supported bucket-storage systems. Catalogue add-ons help coding agents operate the tool.
Borrowing it
Nothing to install: this file belongs to utkuozdemir/pv-migrate. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/utkuozdemir/pv-migrate/main/.github/copilot-instructions.mdgit clone --depth 1 https://github.com/utkuozdemir/pv-migrateWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/utkuozdemir/pv-migrate/copilot-instructions)<a href="https://agentmods.dev/instructions/utkuozdemir/pv-migrate/copilot-instructions"><img src="https://agentmods.dev/badge/instructions/utkuozdemir/pv-migrate/copilot-instructions/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/utkuozdemir/pv-migrate/copilot-instructions"><img src="https://agentmods.dev/badge/instructions/utkuozdemir/pv-migrate/copilot-instructions.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00674 | $0.00674 |
| Opus 5.5 | $0.00270 | $0.00270 |
| Sonnet 5.5 | $0.00135 | $0.00135 |
| Haiku 4.5 | $0.00067 | $0.00067 |
Grade A, and why
pv-migrate copilot-instructions.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
What it actually says
Copilot instructions
Read AGENTS.md in the repository root first. It is the project guide, and everything below is only the short version for when you have not opened it.
- The rsync and rclone commands are built in Go as shell strings that the embedded Helm chart interpolates into a
sh -cscript inside a YAML block scalar. Every path, host and spec that goes into one is quoted as a single shell word byinternal/shell, and a value containing a character YAML will not carry on one line is rejected rather than quoted, because it would break the chart's rendering instead of the command.extraArgsis the one deliberate exception and stays raw. - A user-supplied
--source-pathor--dest-pathis resolved against the container's mount point and must stay inside it.--dest-path ../would otherwise name the container's root, which rsync writes to and, with the delete flag, deletes from. - The operation ID's length limit is set by Helm's 53-character release name limit, not Kubernetes' 63. It lives in
internal/opidand is checked by a test that hands the worst-case names to Helm's own validator. - The Helm chart in
internal/helm/pv-migrateis embedded in the binary, so editing a template is a code change. ItsREADME.mdis generated from the comments invalues.yamlby helm-docs, anddocs/cli-reference.mdis generated from the commands' help output. Never edit either by hand: runtask generate-all, which CI checks for drift. - Progress is scraped from the job pod's log because neither data mover has a progress API. A parsed update must have a percentage between 0 and 100 and a total no smaller than what has been transferred. An estimated total is corrected up to meet that; a number the mover states outright and that cannot satisfy it makes the line refused instead, since a fabricated 100% reads as a finished transfer. The two parsers refuse different things because they read different formats: a percentage above 100 does not match rsync's pattern, and a negative byte count is only expressible in rclone's typed JSON.
- Verify with
task test(which also replays the fuzz seed corpora) andtask lint. The integration suites are behind build tags and need real clusters. - Commits follow the conventional-commit format (
type(scope): imperative description) with a body explaining what changed and why, and carry a DCO sign-off. A behaviour fix belongs in afix:commit even when it arrives with the tests that found it, because the changelog is grouped on the type. One commit per pull request is strongly preferred, and its title and body are then the pull request's title and description verbatim, minus the sign-off trailer. Commits are deliberately not cryptographically signed, because a signature does not survive the rebase or squash that lands a change, so do not add-S. Release tags are the exception:task releasesigns them and the release workflow refuses an unverified tag. Do not add AI attribution of any kind, such as "generated with" lines or AI co-author trailers.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2mo ago Changed · +22 tokens per session cf54e52604eb
- 2mo ago First seen · 12 lines · 652 tokens per session scan A 0f736f7a7f51
pv-migrate copilot-instructions.md is an instructions file published in the GitHub repository utkuozdemir/pv-migrate (2,432 stars, last pushed yesterday), licensed Apache-2.0. It adds 674 tokens to every session, about $0.0027 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
pv-migrate copilot-instructions.md compared with instructions from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| pv-migrate copilot-instructions.mdutkuozdemir/pv-migrate | Instructions file | 2.4k | yesterday | Apache-2.0 | A | 674 | GitHub Copilot |
| vscode buildNext.instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 9,719 | GitHub Copilot |
| next.js AGENTS.mdvercel/next.js | Instructions file | 143k | today | MIT | A | 7,461 | Codex, OpenCode |
| langchain AGENTS.mdlangchain-ai/langchain | Instructions file | 149k | yesterday | MIT | A | 4,680 | Codex, OpenCode |
| vscode oss-third-party-notices.instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 5,516 | GitHub Copilot |
| vscode copilot-instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 3,093 | GitHub Copilot |
| deepseek-harness AGENTS.mddeepseek-ai/deepseek-harness | Instructions file | 274k | 2d ago | MIT | A | 4,313 | Codex, OpenCode |