Install the "package-version-safety" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/sui/package-version-safety into .claude/skills/package-version-safety/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "package-version-safety", 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.
Type 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.
skills CLI
$ npx skills add PlamenTSV/plamen --skill package-version-safety -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "package-version-safety" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/sui/package-version-safety into .agents/skills/package-version-safety/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "package-version-safety", 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.
skills CLI
$ npx skills add PlamenTSV/plamen --skill package-version-safety -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "package-version-safety" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/sui/package-version-safety into .cursor/skills/package-version-safety/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "package-version-safety", 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.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add PlamenTSV/plamen --skill package-version-safety -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "package-version-safety" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/sui/package-version-safety into .gemini/skills/package-version-safety/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "package-version-safety", 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.
Installs 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).
skills CLI
$ npx skills add PlamenTSV/plamen --skill package-version-safety -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "package-version-safety" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/sui/package-version-safety into .github/skills/package-version-safety/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "package-version-safety", 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.
skills CLI
$ npx skills add PlamenTSV/plamen --skill package-version-safety -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "package-version-safety" agent skill from https://github.com/PlamenTSV/plamen/tree/main/agents/skills/sui/package-version-safety into .opencode/skills/package-version-safety/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "package-version-safety", 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.
Facts
Skill name
package-version-safety
GitHub stars
303
Token cost
~3.1k tokens
SKILL.md length
1,339 words
Files
1
Skills in repo
87
Repo updated
First seen
Licence
MIT
At a glance
Trigger Pattern PACKAGEUPGRADE flag (UpgradeCap detected, multiple package versions, upgrade policy references) - Inject Into Breadth agents, depth-external
Works in 6 steps: Upgrade Policy Inventory → Version Consistency Check → Dependency Version Pinning → …
Pattern PACKAGEUPGRADE flag (UpgradeCap detected
SKILL.md covers Trigger Patterns, Step 1: Upgrade Policy Inventory, Step 2: Version Consistency… and Step 3: Dependency Version…, plus 7 more sections
Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
What it does
Package Version Safety is an agent skill from PlamenTSV/plamen. Trigger Pattern PACKAGEUPGRADE flag (UpgradeCap detected, multiple package versions, upgrade policy references) - Inject Into Breadth agents, depth-external
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Autonomous Web3 security audit agent for Claude Code. The licence is MIT.
When your agent uses it
Pattern PACKAGEUPGRADE flag (UpgradeCap detected
Multiple package versions
Upgrade policy references) - Inject Into Breadth agents
Example prompts
“/package-version-safety”
Workflow steps
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 795962b. It shows what the files ask for, not the result of running them.
Tool permissions
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.
Runs code
No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown).
From the folder's file list and the shell code blocks in SKILL.md.
Network
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Package Version Safety loads about 3.1k tokens when it runs. Until then it costs about 45 tokens; SKILL.md has 1,339 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~45
When it runs· the whole SKILL.md, loaded when a task matches
~3.1k
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.
Safety
Auto-check passed
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); files beside SKILL.md are not scanned.
Sui packages are immutable once published. "Upgrading" a package means publishing a NEW version at a NEW on-chain address, linked to the original via the UpgradeCap lineage. The old version's code remains callable forever. This creates a fundamentally different upgrade risk model compared to EVM proxies: instead of replacing logic in-place, Sui packages accumulate versions -- and shared objects may be accessible by ALL versions simultaneously.
If UpgradeCap has drop via wrapper -> accidental destruction possible.
1b. UpgradeCap Governance Assessment
Governance Model
Risk Level
Assessment
Single EOA
CRITICAL
One key compromise replaces all package logic
Multisig (2/3 or lower)
HIGH
Low collusion threshold
Multisig (3/5+)
MEDIUM
Requires majority collusion
Multisig + timelock
LOW
Users can exit before malicious upgrade takes effect
DAO/governance contract
LOW
Distributed control, but check voter distribution
Destroyed (immutable)
NONE
Cannot upgrade, but also cannot patch bugs
Step 2: Version Consistency Check
For shared objects created by this package:
Shared Object
Created By (Version)
Current Version Field?
V1 Functions Access?
V2 Functions Access?
Consistency Risk
{obj_type}
V1 init()
YES: version: u64 / NO
{list funcs}
{list funcs}
{describe}
What happens when package is upgraded?
Existing shared objects created by V1 remain at their original address
V2 functions CAN access V1-created shared objects (types are preserved in compatible upgrades)
V1 functions are STILL callable and CAN access the same shared objects
This dual-access is the primary version safety concern
Can old-version and new-version calls on same shared object create inconsistency?
V1 function writes field A based on formula F1
V2 function writes field A based on formula F2
User calls V1 then V2 in separate transactions -> field A has inconsistent state
Especially dangerous: V2 adds a new check that V1 lacks. Attacker calls V1 to bypass V2's check.
Step 3: Dependency Version Pinning
For each dependency in Move.toml:
Dependency
Source
Pinned To
Immutable?
Upgrade Risk
Sui Framework
sui = "..."
{git rev or latest}
Upgraded by validators
Framework upgrade could change behavior
MoveStdlib
MoveStdlib = "..."
{git rev}
Upgraded with framework
Same as above
{third_party}
{git url or on-chain}
{specific rev / branch / on-chain version}
YES/NO
{describe}
Checks:
Are third-party dependencies pinned to specific git revisions? If pinned to main -> upstream changes included on recompile.
For on-chain published dependencies: is the dependency package immutable? If it has active UpgradeCap -> behavior can change.
Can a dependency upgrade break our package's invariants?
Are there transitive dependencies with their own upgrade risks?
Can dependency upgrade break our package?
Compatible dependency upgrade: function implementations can change but signatures preserved. Our calls still compile but behavior may differ.
Additive dependency upgrade: only new functions/types added. Existing behavior frozen.
Framework upgrades: sui::* packages upgraded by validators. Can change Move VM behavior, gas costs, object model rules.
Step 4: Type Compatibility Across Versions
When package V2 adds new types or fields:
Type
V1 Definition
V2 Changes
Compatible Upgrade Rule
Migration Needed?
{struct_name}
{fields}
{cannot change for compatible}
Struct layouts FROZEN
NO -- same layout
{new_struct}
N/A
{new in V2}
New types allowed
N/A
Sui type rules for compatible upgrades:
Existing struct field layouts CANNOT change (enforced by validator during upgrade)
New structs CAN be added
Existing function signatures CANNOT change
Function bodies CAN change (this is where logic vulnerabilities occur)
Generic type parameters must remain the same
Can V1 objects be used with V2 functions?
YES for compatible upgrades: types are identical, V2 functions accept V1 objects.
NO for separate package deployment: different package address = different types.
Can V2 objects be used with V1 functions?
V2 does not create new object types that V1 knows about (V1 code is frozen).
But V2 functions can modify shared objects that V1 functions then read -- state corruption possible.
Dynamic field implications:
Dynamic fields keyed by type. If V2 changes key/value types for dynamic fields -> V1-era entries orphaned.
Check: does V2 change any dynamic field key types?
Show full SKILL.md (540 more words)Show less
Step 5: Upgrade Migration Safety
Does the package have migration functions to update shared objects from V1->V2 state?
Migration Function
Trigger
What It Updates
Reversible?
Access Control
{migrate_func}
{admin call / automatic}
{version field, new state}
NO
{AdminCap / anyone}
Version guard pattern: Shared objects contain version: u64. V1 functions check assert!(version == 1). V2 migration function sets version = 2. After migration, V1 functions abort because version != 1.
Check:
Is version guard implemented? If NOT -> old functions remain callable indefinitely -> FINDING.
Can migration be triggered by unauthorized parties?
Is migration atomic? Can it be partially completed?
What happens to user-owned objects during migration? (Owned objects cannot be modified by admin migration)
Step 6: UpgradeCap Governance
If UpgradeCap is owned by a single address:
Risk
Description
Severity
Full logic replacement
Attacker upgrades package with malicious code. All shared objects now interact with attacker's logic.
CRITICAL
Subtle parameter change
Attacker upgrades to change a fee calculation or threshold in function body. Hard to detect.
HIGH
Dependency manipulation
Attacker upgrades to change dependency versions, pulling in vulnerable code.
HIGH
Policy escalation blocked
Upgrade policies can only be tightened (compatible -> additive -> dep_only -> immutable). Attacker cannot escalate from additive to compatible.
Mitigation
Mitigations to check:
Is UpgradeCap behind multisig?
Is there an upgrade timelock (users can exit before upgrade takes effect)?
Is there a multi-party approval mechanism for upgrades?
Has the upgrade policy been tightened from the default compatible?
Is make_immutable() called in init() for packages that should never upgrade?
Key Questions (Must Answer All)
UpgradeCap security: Who holds it? What is the attack surface if compromised?
Upgrade policy: Is the policy appropriate? Could it be tightened without losing needed functionality?
Cross-version bypass: Can old functions bypass security checks added in new versions?
Version guard: Is there a mechanism to disable old functions after upgrade?
Type compatibility: Are all types compatible? Are dynamic fields accessible across versions?
Common False Positives
Immutable package: UpgradeCap destroyed or make_immutable called -> no upgrade risk
No shared objects: If old and new packages share no objects, cross-version interaction impossible
Version guard implemented: Shared objects check version field, old functions abort after migration
Capability migrated: Old package's capabilities consumed by new package, old functions uncallable
additive or dep_only policy: Existing logic frozen (but new functions can still access shared objects -- check Step 3c)
Output Schema
markdown
## Finding [PV-N]: Title
**Verdict**: CONFIRMED / PARTIAL / REFUTED / CONTESTED
**Step Execution**: check1,2,3,4,5,6 | skip(reason) | uncertain
**Rules Applied**: [R4:___, R8:___, R9:___, R10:___]
**Severity**: Critical/High/Medium/Low/Info
**Location**: sources/{module}.move:LineN
**Upgrade Risk Type**: UPGRADECAP_MANAGEMENT / POLICY_INAPPROPRIATE / CROSS_VERSION_BYPASS / TYPE_INCOMPATIBILITY / DEPENDENCY_RISK / MISSING_VERSION_GUARD
**Package Version**: V{N} -> V{N+1}
**Shared Objects Affected**: {list}
**Description**: What is wrong
**Impact**: What can happen (logic replacement, security bypass, stranded assets, type mismatch)
**Evidence**: Code showing vulnerability
**Recommendation**: How to fix (tighten policy, add version guard, migrate capabilities, destroy UpgradeCap)
Step Execution Checklist (MANDATORY)
Step
Required
Completed?
Notes
1. Upgrade Policy Inventory
YES
UpgradeCap location, holder, policy
1b. UpgradeCap Governance Assessment
YES
Risk level for each package
2. Version Consistency Check
YES
All shared objects checked for dual-version access
3. Dependency Version Pinning
YES
Move.toml analyzed
4. Type Compatibility Across Versions
YES
Dynamic fields included
5. Upgrade Migration Safety
YES
Version guard pattern checked
6. UpgradeCap Governance
IF single-address holder
Multisig/timelock/approval checks
Cross-Reference Markers
After Step 1: If UpgradeCap held by single address -> immediate finding (minimum HIGH).
After Step 2: If cross-version bypass possible -> cross-reference with MIGRATION_ANALYSIS Step 5 for shared object function enumeration.
After Step 3: Feed dependency risks to DEPENDENCY_AUDIT for transitive dependency analysis.
After Step 5: If no version guard AND shared objects hold user funds -> minimum HIGH finding.
If any step skipped, document valid reason (N/A, package is immutable, no shared objects, no third-party dependencies).
Package Version Safety 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.
Package Version Safety compared with similar skills
Python-specific design patterns and best practices including protocols, dataclasses, context managers, decorators, async/await, type hints, and package organization.
Go-specific design patterns and best practices including functional options, small interfaces, dependency injection, concurrency patterns, error handling, and package organization.
Prepare Solidity projects for a security audit — test coverage, test quality, NatSpec docs, code hygiene, dependency health, best-practice enforcement, deployment readiness, and project…
Trigger Pattern Always required for Solana audits - Inject Into Breadth agents, depth agents
303 GitHub stars~1.7k tokensUpdated 11 days ago
Auto-check passed
Questions about Package Version Safety
What does Package Version Safety do?
Trigger Pattern PACKAGEUPGRADE flag (UpgradeCap detected, multiple package versions, upgrade policy references) - Inject Into Breadth agents, depth-external. Package Version Safety is an agent skill from PlamenTSV/plamen.
When should I use Package Version Safety?
Package Version Safety fits situations like: pattern PACKAGEUPGRADE flag (UpgradeCap detected; multiple package versions; upgrade policy references) - Inject Into Breadth agents.
How do I install Package Version Safety in Claude Code?
Run `npx skills add PlamenTSV/plamen --skill package-version-safety -a claude-code`. Or copy the skill folder (agents/skills/sui/package-version-safety in PlamenTSV/plamen) into .claude/skills/package-version-safety in your project. Claude Code loads it when a task matches its description.
How do I install Package Version Safety in Codex?
Run `npx skills add PlamenTSV/plamen --skill package-version-safety -a codex`. Or copy the skill folder (agents/skills/sui/package-version-safety in PlamenTSV/plamen) into .agents/skills/package-version-safety in your project. Codex loads it when a task matches its description.
Can I use Package Version Safety in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add PlamenTSV/plamen --skill package-version-safety -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/package-version-safety, .gemini/skills/package-version-safety, .github/skills/package-version-safety and .opencode/skills/package-version-safety in your project.
What does Package Version Safety need to run?
SKILL.md names no scripts, command-line tools or credentials: Package Version Safety is instructions for the agent only.
Does Package Version Safety access the network?
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Is Package Version Safety safe to install?
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. Review the folder before installing.
What licence does Package Version Safety use?
Package Version Safety is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Package Version Safety use?
About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
What are the alternatives to Package Version Safety?
Skills that share tags, products or a category with Package Version Safety: Detecting Anomalous Authentication Patterns (mukul975/Anthropic-Cybersecurity-Skills, 34k stars), Detecting Beaconing Patterns With Zeek (mukul975/Anthropic-Cybersecurity-Skills, 34k stars), Python Patterns (affaan-m/ECC, 275k stars) and Memory Safety Patterns (wshobson/agents, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Package Version Safety?
PlamenTSV (a GitHub user) maintains it in PlamenTSV/plamen, which has 303 GitHub stars. The repository holds 87 skills in this directory. The repository was last updated on September 26, 2026.
Source: PlamenTSV/plamen on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.